# Poned las librerías que uséis aquí
library(readxl)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(psych)
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
library(corrplot)
## corrplot 0.90 loaded
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
## The following object is masked from 'package:dplyr':
##
## recode
Se pretende identificar ineficiencias en el proceso de venta o factores internos y externos que pueden estar impactando el rendimiento de las mismas de una empresa de dispositivos electrónicos para las franquicias de todo el país.
Las variables son las siguientes:
Teniendo en cuenta la descripción de cada variable, y los valores que véis en éstas, formatead correctamente el dataframe.
Se establece la carga del dataset desde un path relativo y no absoluto:
df <- readxl::read_excel("DatosPractica.xlsx")
Se establece una primera visión global de las variables presentes en el dataframe df:
glimpse(df)
## Rows: 4,403
## Columns: 18
## $ REGISTRO <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1~
## $ PROVINCIA <chr> "Albacete", "Albacete", "Albacete", "Albacete", ~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.7~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.50~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1,~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, ~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 3~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, ~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, ~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, ~
## $ estp <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ~
## $ grupo <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ fju <dbl> 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, ~
Realizada esta primera visión, se decide el descarte de las variables existentes en el dataframe no susceptibles de análisis o uso según el enunciado completo de la práctica. Estas son, a saber: grupo y fju. Se elimina asimismo, REGISTRO por condiderarse no útil o significativa. Se toma la decisión de mantener el ‘NÚMERO DE EMPLEADOS’ por valorarse su a priori utilidad y relevancia:
df1 <- df %>%
select(-REGISTRO, -grupo, -fju)
Aunque no sea o fuere necesario, se valora como buena praxis el establecimiento de las variables como factor, formando parte del procedimiento inicial de preparación de los datos:
df1 %>%
mutate(across(where(is.character), as.factor))
## # A tibble: 4,403 x 15
## PROVINCIA rentabieco rentabifin endp liq PRODUCTIVIDAD VENTAS
## <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Albacete 0.860 8.40 89.8 1.10 115. 1270.
## 2 Albacete -4.75 -20.1 76.4 1.31 146. 338.
## 3 Albacete -0.322 -1.93 83.3 0.854 11.7 17715.
## 4 Albacete 13.0 28.4 54.2 1.58 19.3 20848.
## 5 Albacete 1.46 55.7 97.4 1.01 37.0 1239.
## 6 Albacete 1.59 6.80 76.5 1.26 13.1 20071.
## 7 Albacete 9.97 31.7 68.5 0.588 12.0 273.
## 8 Albacete 4.38 11.3 61.3 0.943 70.8 1926.
## 9 Albacete 1.75 10.2 82.9 1.06 4.94 382.
## 10 Albacete 0.225 -1.57 114. 1.26 2.50 250.
## # ... with 4,393 more rows, and 8 more variables: NÚMERO DE EMPLEADOS <dbl>,
## # coe <dbl>, edad <dbl>, conce <dbl>, numac <dbl>, numpa <dbl>, numest <dbl>,
## # estp <dbl>
Se comprueba que todo esté en orden en el dataframe con la visión global del mismo y su comparativa con el estatus anterior:
glimpse(df1)
## Rows: 4,403
## Columns: 15
## $ PROVINCIA <chr> "Albacete", "Albacete", "Albacete", "Albacete", ~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.7~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.50~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1,~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, ~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 3~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, ~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, ~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, ~
## $ estp <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ~
Se comprueba si tenemos missings o no. En caso negativo no procede hacer nada. En caso afirmativo, realizaremos la búsqueda de en qué variables están presentes para ser tenidos en cuenta de aquí en adelante:
sum(is.na(df1)) # El resultado es cero. Negativo -> no procede hacer nada.
## [1] 0
Análisis descriptivo. Estudiar la distribución de las variables, así como detectar posibles valores atípicos o relaciones
Se está ante una variable cuantitativa contínua.
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df1$rentabieco)
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 4403 0.76 13.4 1.77 2.08 3.52 -179.7 48.41 228.12 -4.43 38.89
## se
## X1 0.2
summary(df1$rentabieco)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -179.7045 0.1294 1.7748 0.7648 4.8275 48.4145
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df1$rentabieco, xlab = "Rentabilidad económica", ylab = "%", main = "Rentabilidad económica (rentabieco)")
Se realiza un gráfico de bigotes:
boxplot(df1$rentabieco, xlab = "Rentabilidad económica", ylab = "%", main = "Rentabilidad económica (rentabieco)")
En ggplot:
df1 %>%
ggplot(aes(rentabieco)) +
labs(x = "Rentabilidad económica (%)", y = "") +
geom_boxplot() + ggtitle("Rentabilidad económica (rentabieco)")
Se realiza un histograma:
hist(df1$rentabieco, xlab = "Rentabilidad económica (%)", ylab = "Cantidad", main = "Rentabilidad económica (rentabieco)")
En ggplot:
df1 %>%
ggplot(aes(rentabieco)) +
labs(x = "Rentabilidad económica (%)", y = "Cantidad") +
geom_histogram() + ggtitle("Rentabilidad económica (rentabieco)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Rentabilidad Económica corresponde o no a una distribución normal:
shapiro.test(df1$rentabieco)
##
## Shapiro-Wilk normality test
##
## data: df1$rentabieco
## W = 0.62281, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Rentabilidad Económica: ésta será el ratio entre el beneficio bruto obtenido y lo invertido, expresado en %. Se puede lograr incrementarlo vendiendo con más margen (subiendo el precio de venta y/o bajando los costes de producción) o bien incrementando las ventas.
2.- Centrándose en la tendencia central y fijándose en la media y en la mediana (boxplot), se aprecian unos valores positivos de Rentabilidad Económica, comprendidos del 0.76 y el 1.77% respectivamente, con una dispersión marcada principalmente por una desviación estándar del 13.40%.
3.- Ahondando en la dispersión, el rango es extremadamente amplio, con su extremo de valores negativo destancado hasta un valor mínimo de -179.70%. Se tiene un máximo de 48.41%. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en porcertanjes comprendidos entre 0.13% y 4.83%.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea negativo (-4.43) nos indica que se presenta como una distribución asimétrica negativa, es decir, con una cola extendida hacia los valores negativos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, en el que se constataba que en cuanto al rango el valor mínimo está muy alejado de la media en comparación al máximo. Este hecho se puede sumar a la gran distancia de primer cuartil (0.13 %) respecto a dicho mínimo, y la presencia de valores entre este mínimo y el primer cuartil.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 38.89, bastante mayor a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df1$rentabieco, prob=c(0.25))
Q1
## 25%
## 0.129383
Q3 = quantile(df1$rentabieco, prob=c(0.75))
Q3
## 75%
## 4.827513
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -6.917813
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 11.87471
Los outliers serán por lo tanto los porcentajes menores al Minimum < -6.92% y mayores al Maximum > 11.87%
Se está ante una variable cuantitativa contínua.
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df1$rentabifin)
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 4403 16.2 62.8 10.67 14.09 14.45 -459.48 494.18 953.66 0.16 18.7
## se
## X1 0.95
summary(df1$rentabifin)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -459.480 2.658 10.671 16.198 24.988 494.178
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df1$rentabifin, xlab = "Rentabilidad Financiera", ylab = "%", main = "Rentabilidad Financiera (rentabifin)")
Se realiza un gráfico de bigotes:
boxplot(df1$rentabifin, xlab = "Rentabilidad Financiera", ylab = "%", main = "Rentabilidad Financiera (rentabifin)")
En ggplot:
df1 %>%
ggplot(aes(rentabifin)) +
labs(x = "Rentabilidad Financiera (%)", y = "") +
geom_boxplot() + ggtitle("Rentabilidad Financiera (rentabifin)")
Se realiza un histograma:
hist(df1$rentabifin, xlab = "Rentabilidad Financiera (%)", ylab = "Cantidad", main = "Rentabilidad Financiera (rentabifin)")
En ggplot:
df1 %>%
ggplot(aes(rentabifin)) +
labs(x = "Rentabilidad Financiera (%)", y = "Cantidad") +
geom_histogram() + ggtitle("Rentabilidad Financiera (rentabifin)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Rentabilidad Financiera corresponde o no a una distribución normal:
shapiro.test(df1$rentabifin)
##
## Shapiro-Wilk normality test
##
## data: df1$rentabifin
## W = 0.67036, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Rentabilidad Financiera: ésta será el ratio entre el beneficio neto obtenido (beneficio bruto descontando los intereses de lo invertido como préstamo) y lo invertido como recurso propio, no como préstamo, expresado en %. Se puede lograr incrementarlo si se acude al endeudamiento mediante préstamos.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Rentabilidad Financiera, comprendidos del 10.67 y el 16.20% respectivamente, con una dispersión marcada principalmente por una desviación estándar del 62.80%.
3.- Ahondando en la dispersión, el rango es extremadamente amplio, su extremo negativo mínimo de -459.48% y un máximo de 494.18%. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en porcertanjes comprendidos entre 2.66% y 24.99%.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea ligeramente positivo (0.16) nos indica que se presenta como una distribución ligeramente asimétrica positiva, es decir, con una cola ligeramente extendida hacia los valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, en el que se constataba que en cuanto al rango el valor mínimo y el máximo indican que se trata de una distribución bastante simétrica.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 18.70, sensiblemente mayor a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df1$rentabifin, prob=c(0.25))
Q1
## 25%
## 2.658328
Q3 = quantile(df1$rentabifin, prob=c(0.75))
Q3
## 75%
## 24.9881
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -30.83633
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 58.48276
Los outliers serán por lo tanto los porcentajes menores al Minimum < -30.84% y mayores al Maximum > 58.48%
Se está ante una variable cuantitativa contínua.
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df1$endp)
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 4403 79.53 37.05 79.15 77.28 23.13 0 433.21 433.21 2.59 16.35
## se
## X1 0.56
summary(df1$endp)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 61.21 79.15 79.53 93.25 433.21
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df1$endp, xlab = "Nivel de Endeudamiento", ylab = "%", main = "Nivel de Endeudamiento (endp)")
Se realiza un gráfico de bigotes:
boxplot(df1$endp, xlab = "Nivel de Endeudamiento", ylab = "€", main = "Nivel de Endeudamiento (endp)")
En ggplot:
df1 %>%
ggplot(aes(endp)) +
labs(x = "Nivel de Endeudamiento (€)", y = "") +
geom_boxplot() + ggtitle("Nivel de Endeudamiento (endp)")
Se realiza un histograma:
hist(df1$endp, xlab = "Nivel de Endeudamiento (€)", ylab = "Cantidad", main = "Nivel de Endeudamiento (endp)")
En ggplot:
df1 %>%
ggplot(aes(endp)) +
labs(x = "Nivel de Endeudamiento (€)", y = "Cantidad") +
geom_histogram() + ggtitle("Nivel de Endeudamiento (endp)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Nivel de Endeudamiento corresponde o no a una distribución normal:
shapiro.test(df1$endp)
##
## Shapiro-Wilk normality test
##
## data: df1$endp
## W = 0.81696, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Nivel de Endeudamiento: éste a diferencia de otras variables algo más complejas es sencillo, se trata de lo que se debe, en este caso en euros.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Nivel de Endeudamiento, de 79.15 y 79.53€ respectivamente, con una dispersión marcada principalmente por una desviación estándar de 37.05€.
3.- Ahondando en la dispersión, el rango es de 433.21€, su extremo negativo mínimo de 0€ y un máximo evidentemente como el rango, de 433.21€. Es decir, excepto para valores de 0€ el resto estará endeudado (valores todos ellos positivos). Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 61.21 y 93.25€.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (2.59) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia los valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero).
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 16.35, sensiblemente mayor a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df1$endp, prob=c(0.25))
Q1
## 25%
## 61.20817
Q3 = quantile(df1$endp, prob=c(0.75))
Q3
## 75%
## 93.24837
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## 13.14786
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 141.3087
Los outliers serán por lo tanto los valores menores al Minimum < 13.15€ y mayores al Maximum > 141.31€
Se está ante una variable cuantitativa contínua.
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df1$liq)
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 4403 1.91 5.08 1.15 1.26 0.4 0.02 113.15 113.14 14.24 250.15
## se
## X1 0.08
summary(df1$liq)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01527 0.94691 1.15317 1.90566 1.54464 113.15031
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df1$liq, xlab = "Liquidez Monetaria", ylab = "Índice", main = "Liquidez Monetaria (liq)")
Se realiza un gráfico de bigotes:
boxplot(df1$liq, xlab = "Liquidez Monetaria", ylab = "Índice", main = "Liquidez Monetaria (liq)")
En ggplot:
df1 %>%
ggplot(aes(liq)) +
labs(x = "Liquidez Monetaria (Índice)", y = "") +
geom_boxplot() + ggtitle("Liquidez Monetaria (liq)")
Se realiza un histograma:
hist(df1$liq, xlab = "Liquidez Monetaria (Índice)", ylab = "Cantidad", main = "Liquidez Monetaria (liq)")
En ggplot:
df1 %>%
ggplot(aes(liq)) +
labs(x = "Liquidez Monetaria (Índice)", y = "Cantidad") +
geom_histogram() + ggtitle("Liquidez Monetaria (liq)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Liquidez Monetaria corresponde o no a una distribución normal:
shapiro.test(df1$liq)
##
## Shapiro-Wilk normality test
##
## data: df1$liq
## W = 0.17047, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Liquidez Monetaria: proporciona la idea de con cuanta rapidez puede una organización disponer de dinero en efectivo. A modo de ejemplo, un depósito en una entidad bancaria implica una gran liquidez a la hora de disponer de ese dinero y un inmueble una menor liquidez (su venta implica un proceso que lo alargará en el tiempo, no es inmediato). Cuando el índice está por encima de 1 la compañía presenta una buena liquidez, cuando es menor a 1 problemas de liquidez. A mayor distancia respecto a 1 mejor o peor grado de liquidez.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Liquidez Monetaria, de 1.15 y 1.91 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 5.08.
3.- Ahondando en la dispersión, el rango es de 113.14€, su extremo negativo mínimo de 0.02 y un máximo evidentemente similar el rango, de 113.15. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 0.95 y 1.54. Con estos datos, se puede ver que ese grueso está en valores de liquidez “neutros” (muy entorno al 1) pero que los mínimos están muy cercanos al cero, es decir, presentan una liquidez extremadamente mala y el valor máximo muy superir a 1 indica que presentan unos grados de liquidez extraordinariamente buenos.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (14.24) nos indica que se presenta como una distribución asimétrica bastante positiva, es decir, con una cola extendida hacia valores muy positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen casos significativos con una muy buena liquidez.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 250.15, extremadamente superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica muy marcada. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df1$liq, prob=c(0.25))
Q1
## 25%
## 0.946906
Q3 = quantile(df1$liq, prob=c(0.75))
Q3
## 75%
## 1.544635
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## 0.05031179
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 2.44123
Los outliers serán por lo tanto los índices menores al Minimum < 0.05 y mayores al Maximum > 2.44
Se está ante una variable cuantitativa contínua.
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df1$PRODUCTIVIDAD)
## vars n mean sd median trimmed mad min max range skew kurtosis
## X1 1 4403 16.22 20.2 11.76 12.47 10.1 -1.17 268.59 269.76 4.89 36.94
## se
## X1 0.3
summary(df1$PRODUCTIVIDAD)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1.172 5.085 11.755 16.224 18.783 268.593
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df1$PRODUCTIVIDAD, xlab = "Productividad", ylab = "Ratio", main = "Productividad (PRODUCTIVIDAD)")
Se realiza un gráfico de bigotes:
boxplot(df1$PRODUCTIVIDAD, xlab = "Productividad", ylab = "Ratio", main = "Productividad (PRODUCTIVIDAD)")
En ggplot:
df1 %>%
ggplot(aes(PRODUCTIVIDAD)) +
labs(x = "Productividad (Ratio)", y = "") +
geom_boxplot() + ggtitle("Productividad (PRODUCTIVIDAD)")
Se realiza un histograma:
hist(df1$PRODUCTIVIDAD, xlab = "Productividad (Ratio)", ylab = "Cantidad", main = "Productividad (PRODUCTIVIDAD)")
En ggplot:
df1 %>%
ggplot(aes(PRODUCTIVIDAD)) +
labs(x = "Productividad (Ratio)", y = "Cantidad") +
geom_histogram() + ggtitle("Productividad (PRODUCTIVIDAD)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la el Ratio de Productividad corresponde o no a una distribución normal:
shapiro.test(df1$PRODUCTIVIDAD)
##
## Shapiro-Wilk normality test
##
## data: df1$PRODUCTIVIDAD
## W = 0.58933, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.1.- Es importante tener claro desde el principo el concepto de Productividad: en este caso se trata del Ratio de Productividad, es decir, aquel que proporcionan las Ventas Betas entre en Número de Empleados. Existen por lo tanto RELACIÓN con estas dos varibles, VENTAS y NÚMERO DE EMPLEADOS, que son dos de las variables de nuestros Datos, haciendo mención del hecho de que nuestra variable VENTAS hace referencia a aquella considerada como Ventas Brutas. Por lo tanto, tendiendo Ventas Netas = Ventas Brutas - (devoluciones a clientes + descuentos a clientes + bonificaciones a clientes), se tiene la relación Ventas Netas = VENTAS - XClientes. Así, PRODUCTIVIDAD = Ventas Netas / NÚMERO DE EMPLEADOS = (VENTAS - XClientes) / NÚMERO DE EMPLEADOS, por lo que PRODUCTIVIDAD * NÚMERO DE EMPLEADOS = VENTAS - XClientes. Se concluye por lo tanto, XClientes = VENTAS - PRODUCTIVIDAD * NÚMERO DE EMPLEADOS.
1.2.- Hilando con el punto 1.1. y siguiento con su argumentación, se considera que se debe añadir una nueva e importante variable: el porcentaje en % de gasto XCliente con respecto a las Ventas Brutas (VENTAS), es decir, PORCENTAJE GASTO POR CLIENTE = (XClientes / VENTAS) * 100 = ((VENTAS - PRODUCTIVIDAD * NÚMERO DE EMPLEADOS) / VENTAS) * 100. De esta forma se tiene el % de lo que cada una gasta en los cliente,s como política de empresa, respecto a sus VENTAS (Ventas Brutas).
PORCENTAJE_GASTO_CLIENTES = ((df1$VENTAS - (df1$PRODUCTIVIDAD * df1$`NÚMERO DE EMPLEADOS`))/df1$VENTAS) * 100
df2 <- df1 %>%
mutate(
PORCENTAJE_GASTO_CLIENTES
)
glimpse(df2)
## Rows: 4,403
## Columns: 16
## $ PROVINCIA <chr> "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Ratio de Productividad, de 11.76 y 16.22 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 20.20.
3.- Ahondando en la dispersión, el rango es de 269.76, su extremo negativo mínimo de -1.17 y un máximo evidentemente similar el rango, de 268.59. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 5.08 y 18.78. Con estos datos, se puede ver que ese 50% está en valores de productividad positivos y que los mínimos están muy cercanos al cero, es decir, no presentan a priori una productividad extremadamente mala y existen valores máximo muy altos indicando que presentan unos grados de productividad extraordinariamente buenos.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (4.89) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia los valores mínimos. Es decir, existen casos significativos con una muy buena productividad.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 36.94, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica marcada. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df1$PRODUCTIVIDAD, prob=c(0.25))
Q1
## 25%
## 5.084923
Q3 = quantile(df1$PRODUCTIVIDAD, prob=c(0.75))
Q3
## 75%
## 18.78318
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -15.46246
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 39.33056
Los outliers serán por lo tanto los ratios menores al Minimum < -15.46 y mayores al Maximum > 39.33
Se está ante una variable cuantitativa contínua.
Se establece una relación de % multiplicando por 100 coe para proporcionar una mejor visión de los datos, con una nueva variable a la que se le denominará coe_100:
df3 <- df2 %>%
mutate(
coe_100 = coe * 100
)
glimpse(df3)
## Rows: 4,403
## Columns: 17
## $ PROVINCIA <chr> "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100 <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df3$coe_100)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4403 1.18 2.59 0.21 0.56 0.3 0 50.6 50.6 5.46 54.42 0.04
summary(df3$coe_100)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00012 0.04909 0.21491 1.18101 1.06936 50.60498
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df3$coe_100, xlab = "Cuota de Mercado", ylab = "Índice", main = "Cuota de Mercado (coe)")
Se realiza un gráfico de bigotes:
boxplot(df3$coe_100, xlab = "Cuota de Mercado", ylab = "Índice", main = "Cuota de Mercado (coe)")
En ggplot:
df3 %>%
ggplot(aes(coe_100)) +
labs(x = "Cuota de Mercado (Índice)", y = "") +
geom_boxplot() + ggtitle("Cuota de Mercado (coe)")
Se realiza un histograma:
hist(df3$coe_100, xlab = "Cuota de Mercado (Índice)", ylab = "Cantidad", main = "Cuota de Mercado (coe)")
En ggplot:
df3 %>%
ggplot(aes(coe_100)) +
labs(x = "Cuota de Mercado (Índice)", y = "Cantidad") +
geom_histogram() + ggtitle("Cuota de Mercado (coe)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si la Cuota de Mercado corresponde o no a una distribución normal:
shapiro.test(df3$coe_100)
##
## Shapiro-Wilk normality test
##
## data: df3$coe_100
## W = 0.47735, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Cuota de Mercado: será el porcentaje de ventas del producto para ese negocio en relación a las ventas globales de dicho producto.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores positivos de Cuota de Mercado, de 0.21 y 1.18 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 2.59.
3.- Ahondando en la dispersión, el rango es de 50.60, su extremo negativo mínimo de 0.0001 y un máximo evidentemente como el rango, de 50.60. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 0.05 y 1.07. Con estos datos, se puede ver que ese grueso está en valores de cuota de mercado muy moderados pero que los mínimos están muy cercanos al cero, es decir, presentan una cuota de mercado muy pequeña (probablemente pequeños negocios de barrio que venden muy poquito) y los valores hacia el máximo son muy elevados indicando que probablemente sean grandes negocios con una cuota de mercado muy alta (venden muchísimo producto en esa zona).
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (5.46) nos indica que se presenta como una distribución asimétrica bastante positiva, es decir, con una cola extendida hacia valores muy positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen casos significativos con una muy buena cuota de mercado.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 54.42, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica muy marcada. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df3$coe_100, prob=c(0.25))
Q1
## 25%
## 0.0490925
Q3 = quantile(df3$coe_100, prob=c(0.75))
Q3
## 75%
## 1.069363
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -1.481314
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 2.59977
Los outliers serán por lo tanto las cuotas de mercado menores al Minimum < 0 (-1.48 carece de lógica) y mayores al Maximum > 2.60
Se va a considerar a la edad como una variable cuantitativa contínua (existe un poco de controversia al respecto, pero es posible que sea de más utilidad considerarla contínua que discreta a efectos prácticos para este análisis).
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df3$edad)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4403 12.29 9.16 11 11.28 8.9 0 49 49 1.01 1.05 0.14
summary(df3$edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 5.00 11.00 12.29 18.00 49.00
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df3$edad, xlab = "Tiempo Operando", ylab = "Años", main = "Tiempo Operando (edad)")
Se realiza un gráfico de bigotes:
boxplot(df3$edad, xlab = "Tiempo Operando", ylab = "Años", main = "Tiempo Operando (edad)")
En ggplot:
df3 %>%
ggplot(aes(edad)) +
labs(x = "Tiempo Operando (Años)", y = "") +
geom_boxplot() + ggtitle("Tiempo Operando (edad)")
Se realiza un histograma:
hist(df3$edad, xlab = "Tiempo Operando (Años)", ylab = "Cantidad", main = "Tiempo Operando (edad)")
En ggplot:
df3 %>%
ggplot(aes(edad)) +
labs(x = "Tiempo Operando (Años)", y = "Cantidad") +
geom_histogram() + ggtitle("Tiempo Operando (edad)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Tiempo Operando corresponde o no a una distribución normal:
shapiro.test(df3$edad)
##
## Shapiro-Wilk normality test
##
## data: df3$edad
## W = 0.92737, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Edad: en este caso es sencillo, es el tiempo que lleva operando la entidad, presuponiéndose en años.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian unos valores de Tiempo Operando, de 12.29 y 11 años respectivamente, con una dispersión marcada principalmente por una desviación estándar de 9.16 años.
3.- Ahondando en la dispersión, el rango es de 49 años, su extremo mínimo de 0 años y un máximo evidentemente igual el rango, de 49 años. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 5 y 18 años. Con estos datos, se puede ver que existen entidades que acaban de empezar: 0 años y otras que llevan un tiempo considerable operando.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (1.01) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen casos significativos con alto tiempo operando.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 1.05, inferior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución platicúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df3$edad, prob=c(0.25))
Q1
## 25%
## 5
Q3 = quantile(df3$edad, prob=c(0.75))
Q3
## 75%
## 18
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -14.5
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 37.5
Los outliers serán por lo tanto timpos operando en el mercado menores al Minimum < 0 años (-14.5 años carece de lógica) y mayores al Maximum > 37.5 años
Se va a considerar conce como una variable cuantitativa discreta:
table(df3$conce)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 421 360 276 184 250 162 105 200 162 50 88 72 117 98 45 80 17 72 152 60
## 21 22 24 25 26 28 29 30 31 32 33 34 35 38 40 42 46 49 60 61
## 84 66 72 75 26 56 29 30 31 32 33 34 35 38 40 42 46 49 60 61
## 63 66 149 215
## 63 66 149 215
round(prop.table(table(df3$conce)) * 100, 2)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
## 9.56 8.18 6.27 4.18 5.68 3.68 2.38 4.54 3.68 1.14 2.00 1.64 2.66 2.23 1.02 1.82
## 17 18 19 20 21 22 24 25 26 28 29 30 31 32 33 34
## 0.39 1.64 3.45 1.36 1.91 1.50 1.64 1.70 0.59 1.27 0.66 0.68 0.70 0.73 0.75 0.77
## 35 38 40 42 46 49 60 61 63 66 149 215
## 0.79 0.86 0.91 0.95 1.04 1.11 1.36 1.39 1.43 1.50 3.38 4.88
Demasiado rango y demasiados valores para sacar alguna conclusión coherente con el recurso de tablas de frecuencias. A partir de un número de entidades >= 29, éste coincide con el número de entidades en las que se produce: posible pero extraño.
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df3$conce)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4403 29.8 50.95 11 16.28 13.34 1 215 214 2.73 6.58 0.77
summary(df3$conce)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.0 4.0 11.0 29.8 28.0 215.0
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df3$conce, xlab = "Entidades Similares en el Municipio", ylab = "Número", main = "Entidades Similares en el Municipio (conce)")
Se realiza un gráfico de bigotes:
boxplot(df3$conce, xlab = "Entidades Similares en el Municipio", ylab = "Número", main = "Entidades Similares en el Municipio (conce)")
En ggplot:
df3 %>%
ggplot(aes(conce)) +
labs(x = "Entidades Similares en el Municipio (Número)", y = "") +
geom_boxplot() + ggtitle("Entidades Similares en el Municipio (conce)")
Se realiza un histograma:
hist(df3$conce, xlab = "Entidades Similares en el Municipio (Número)", ylab = "Cantidad", main = "Entidades Similares en el Municipio (conce)")
En ggplot:
df3 %>%
ggplot(aes(conce)) +
labs(x = "Entidades Similares en el Municipio (Número)", y = "Cantidad") +
geom_histogram() + ggtitle("Entidades Similares en el Municipio (conce)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si las Entidades Similares en el Municipio corresponde o no a una distribución normal:
shapiro.test(df3$conce)
##
## Shapiro-Wilk normality test
##
## data: df3$conce
## W = 0.55731, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Conce: es el número de entidades similares presentes en ese municipio en el que opera la entidad.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de Entidades Similares en el Municipio, de 11 y 29.8 entidades respectivamente, con una dispersión marcada principalmente por una desviación estándar de 50.95 entidades.
3.- Ahondando en la dispersión, el rango es de 214 entidades, su extremo mínimo de 1 entidad y un máximo evidentemente cercano al rango, de 215 entidades. Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 4 y 28 entidades. Con estos datos, se puede ver que existen municipios con 1 entidad adicional y otros con 215. La diferencia es más que significativa. Llaman mucho la atención a priori, estos dos conjuntos de número de entidades altas en municipios. El sentido común podría hacernos pensar en ¿Madrid y Barcelona como provincias de dichos municipios como grandes focos poblacionales? Se analiza:
madrid_o_bcn <- df3 %>%
filter(
PROVINCIA == "Madrid" | PROVINCIA == "Barcelona"
)
madrid_o_bcn %>%
ggplot(aes(conce)) +
labs(x = "Entidades Similares en el Municipio Madrid o BCN (Número)", y = "Cantidad") +
geom_histogram() + ggtitle("Entidades Similares en el Municipioo Madrid o BCN (conce)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
glimpse(madrid_o_bcn)
## Rows: 1,019
## Columns: 17
## $ PROVINCIA <chr> "Barcelona", "Barcelona", "Barcelona", "Barc~
## $ rentabieco <dbl> -3.830271, -2.003177, 6.821822, -28.781597, ~
## $ rentabifin <dbl> -21.065254, -4.384339, 14.708571, 20.966486,~
## $ endp <dbl> 81.81712, 54.31064, 53.62009, 237.27431, 64.~
## $ liq <dbl> 0.826364, 1.325191, 1.840783, 0.271941, 1.55~
## $ PRODUCTIVIDAD <dbl> 10.660412, 9.204866, 1.114885, 6.247975, 9.5~
## $ VENTAS <dbl> 11234.814, 2818.803, 527.305, 563.561, 30802~
## $ `NÚMERO DE EMPLEADOS` <dbl> 48, 14, 7, 4, 81, 1, 13, 48, 88, 21, 24, 37,~
## $ coe <dbl> 2.707490e-03, 6.793065e-04, 1.270758e-04, 1.~
## $ edad <dbl> 9, 35, 16, 26, 17, 3, 9, 14, 39, 16, 21, 42,~
## $ conce <dbl> 17, 11, 2, 149, 8, 149, 149, 14, 149, 2, 21,~
## $ numac <dbl> 4, 4, 0, 0, 1, 0, 1, 2, 3, 2, 5, 1, 0, 2, 1,~
## $ numpa <dbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ numest <dbl> 2, 1, 1, 1, 6, 1, 1, 2, 4, 2, 2, 2, 1, 4, 1,~
## $ estp <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 95.44541, 95.42827, 98.51998, 95.56536, 97.4~
## $ coe_100 <dbl> 0.270749049, 0.067930648, 0.012707582, 0.013~
Se establece por lo tanto como conclusión que es lógico que puedan a presentarse un número alto de entidades similares en municipios de ambas provincias, dada su alta densidad de población.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (2.73) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (uno). Es decir, existen municipios significativos con alto número de entidades similares.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 6.58, superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df3$conce, prob=c(0.25))
Q1
## 25%
## 4
Q3 = quantile(df3$conce, prob=c(0.75))
Q3
## 75%
## 28
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -32
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 64
Los outliers serán por lo tanto entidades similares presentes en ese municipio menores al Minimum < 0 (-32 entidades carece de lógica) y mayores al Maximum > 64
Se va a considerar numac como una variable cuantitativa discreta:
table(df3$numac)
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 1610 1517 662 287 175 70 30 20 11 4 4 4 1 2 3 1
## 16 17
## 1 1
round(prop.table(table(df3$numac)) * 100, 2)
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12
## 36.57 34.45 15.04 6.52 3.97 1.59 0.68 0.45 0.25 0.09 0.09 0.09 0.02
## 13 14 15 16 17
## 0.05 0.07 0.02 0.02 0.02
Rango: de 0 a 17. Se aprecia que abundan más entidades de “pequeños accionistas” (0-2).
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df3$numac)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4403 1.23 1.54 1 0.95 1.48 0 17 17 2.83 14.83 0.02
summary(df3$numac)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 1.000 1.228 2.000 17.000
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df3$numac, xlab = "Entidades", ylab = "Número de Accionistas", main = "Número de Accionistas (numac)")
Se realiza un gráfico de bigotes:
boxplot(df3$numac, xlab = "Entidades", ylab = "Número de Accionistas", main = "Número de Accionistas (numac)")
En ggplot:
df3 %>%
ggplot(aes(numac)) +
labs(x = "Número de Accionistas", y = "") +
geom_boxplot() + ggtitle("Número de Accionistas (numac)")
Se realiza un histograma:
hist(df3$numac, xlab = "Número de Accionistas", ylab = "Cantidad", main = "Número de Accionistas (numac)")
En ggplot:
df3 %>%
ggplot(aes(numac)) +
labs(x = "Número de Accionistas", y = "Cantidad") +
geom_histogram() + ggtitle("Número de Accionistas (numac)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Número de Accionistas corresponde o no a una distribución normal:
shapiro.test(df3$numac)
##
## Shapiro-Wilk normality test
##
## data: df3$numac
## W = 0.72155, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Numac: es el número de accionistas.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de accionistas, de 1 y 1.23 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 1.54 accionistas.
3.- Ahondando en la dispersión, el rango es de 17 accionistas, su extremo mínimo de 0 accionistas y un máximo evidentemente como el rango, de 17 accionistas Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en valores comprendidos entre 0 y 2 accionistas. Se aprecia que abundan más las entidades con pequeño número de accionistas.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (2.83) nos indica que se presenta como una distribución asimétrica positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con mayor distancia, en lo referente a valores, desde la mediana hasta los valores máximos que hacia el mínimo (cero). Es decir, existen entidades con un mayor número de accionistas.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 14.83, superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df3$numac, prob=c(0.25))
Q1
## 25%
## 0
Q3 = quantile(df3$numac, prob=c(0.75))
Q3
## 75%
## 2
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -3
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 5
Los outliers serán por lo tanto el número de accionistas menores al Minimum < 0 (-3 accionistas carece de lógica) y mayores al Maximum > 5
Se va a considerar numpa como una variable cuantitativa discreta:
table(df3$numpa)
##
## 0 1 2 3 4 5 6 7 8 15 20
## 3987 262 80 42 7 14 3 4 2 1 1
round(prop.table(table(df3$numpa)) * 100, 2)
##
## 0 1 2 3 4 5 6 7 8 15 20
## 90.55 5.95 1.82 0.95 0.16 0.32 0.07 0.09 0.05 0.02 0.02
Rango: de 0 a 20. Se aprecia que abundan más entidades de ningún número de participados: 90.55%
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df3$numpa)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4403 0.17 0.73 0 0 0 0 20 20 10.13 184.19 0.01
summary(df3$numpa)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.1687 0.0000 20.0000
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df3$numpa, xlab = "Entidades", ylab = "Número de Participados", main = "Número de Participados (numpa)")
Se realiza un gráfico de bigotes:
boxplot(df3$numpa, xlab = "Entidades", ylab = "Número de Participados", main = "Número de Participados (numpa)")
En ggplot:
df3 %>%
ggplot(aes(numpa)) +
labs(x = "Número de Participados", y = "") +
geom_boxplot() + ggtitle("Número de Participados (numpa)")
Se realiza un histograma:
hist(df3$numpa, xlab = "Número de Participados", ylab = "Cantidad", main = "Número de Participados (numpa)")
En ggplot:
df3 %>%
ggplot(aes(numpa)) +
labs(x = "Número de Participados", y = "Cantidad") +
geom_histogram() + ggtitle("Número de Participados (numpa)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Número de Participados corresponde o no a una distribución normal:
shapiro.test(df3$numpa)
##
## Shapiro-Wilk normality test
##
## data: df3$numpa
## W = 0.23741, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Numpa: es el número de participados.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de participados, de 0 y 0.17 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 0.73 participados.
3.- Ahondando en la dispersión, el rango es de 20 participados, su extremo mínimo de 0 participados y un máximo evidentemente como el rango, de 20 participados Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, en el valor de 0 participados. Se aprecia que abundan más entidades de ningún número de participados.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (10.13) nos indica que se presenta como una distribución asimétrica muy positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con la distancia en lo referente a valores, desde la mediana que es cero, lógicamente hasta los valores máximos.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 184.19, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución extremadamente leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df3$numpa, prob=c(0.25))
Q1
## 25%
## 0
Q3 = quantile(df3$numpa, prob=c(0.75))
Q3
## 75%
## 0
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## 0
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 0
Los outliers serán por lo tanto el número de participados menores al Minimum < 0 y mayores al Maximum > 0, es decir, aquellos que no sean cero
Se va a considerar numest como una variable cuantitativa discreta:
table(df3$numest)
##
## 1 2 3 4 5 6 7 8 9 10 11 13 14 17 34
## 2666 1070 345 163 69 30 29 12 6 4 3 3 1 1 1
round(prop.table(table(df3$numest)) * 100, 2)
##
## 1 2 3 4 5 6 7 8 9 10 11 13 14
## 60.55 24.30 7.84 3.70 1.57 0.68 0.66 0.27 0.14 0.09 0.07 0.07 0.02
## 17 34
## 0.02 0.02
Rango: de 0 a 34. Se aprecia de que el grueso se encuentra entre 1 y 2: 84.85%
Se establecen una serie de descriptivos que aportarán información relevante:
psych::describe(df3$numest)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4403 1.71 1.36 1 1.43 0 1 34 33 5.83 86.4 0.02
summary(df3$numest)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 1.000 1.714 2.000 34.000
Se representa gráficamente la variable de diferentes formas con el objetivo de extraer información de alguna o de todas ellas:
plot(df3$numest, xlab = "Entidades", ylab = "Número de Establecimientos por Empresa", main = "Número de Establecimientos por Empresa (numest)")
Se realiza un gráfico de bigotes:
boxplot(df3$numpa, xlab = "Entidades", ylab = "Número de Establecimientos por Empresa", main = "Número de Establecimientos por Empresa (numest)")
En ggplot:
df3 %>%
ggplot(aes(numest)) +
labs(x = "Número de Establecimientos por Empresas", y = "") +
geom_boxplot() + ggtitle("Número de Establecimientos por Empresa (numest)")
Se realiza un histograma:
hist(df3$numest, xlab = "Número de Establecimientos por Empresa", ylab = "Cantidad", main = "Número de Establecimientos por Empresa (numest)")
En ggplot:
df3 %>%
ggplot(aes(numest)) +
labs(x = "Número de Establecimientos por Empresa", y = "Cantidad") +
geom_histogram() + ggtitle("Número de Establecimientos por Empresa (numest)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como buena praxis y también para futuras posibles necesidades de análisis inferencial estadístico, se determina si el Número de Establecimientos por Empresa corresponde o no a una distribución normal:
shapiro.test(df3$numest)
##
## Shapiro-Wilk normality test
##
## data: df3$numest
## W = 0.54378, p-value < 2.2e-16
El valor p-value es menor a 2.2e-16 y por lo tanto < 0.05, por lo que no lo es.
Conclusiones importantes a destacar tras el análisis y estudio de la variable:
1.- Es importante tener claro desde el principo el concepto de Numest: es el número de establecimientos por empresa.
2.- Centrándose en la tendencia central y fijándose en la mediana (boxplot) y en la media, se aprecian un número de establecimientos por empresa, de 1 y 1.71 respectivamente, con una dispersión marcada principalmente por una desviación estándar de 1.36 establecimientos por empresa.
3.- Ahondando en la dispersión, el rango es de 33 establecimientos por empresa, su extremo mínimo de 1 establecimiento por empresa y un máximo evidentemente similar el rango, de 34 establecimientos por empresa Entre el primer y el tercer cuartil (rango intercuartil) tenemos el grueso de los valores, es decir, entre 1 y 2 establecimientos por empresa. Se aprecia que abundan más entidades con 1 o 2 establecimientos por empresa.
4.- En lo referente a la forma, el hecho de que el sesgo o skew(ness) sea positivo (5.83) nos indica que se presenta como una distribución asimétrica muy positiva, es decir, con una cola extendida hacia valores positivos. Esto se aprecia también visuamente en las gráficas hilando con el punto anterior, con la distancia en lo referente a valores, desde la mediana que es uno, lógicamente hasta los valores máximos.
5.- Siguiendo con la forma, respecto a la curtosis, cuyo valor es de 86.4, muy superior a 3 (el que establece el cambio de platicúrtica < 3 a mesocúrtica = 3), por lo que se está ante una distribución muy leptocúrtica. Los gráficos son bastante aclarativos por sí mismos en este aspecto.
6.- La distribución no corresponde a una normal.
7.- Valores atípicos: los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(df3$numest, prob=c(0.25))
Q1
## 25%
## 1
Q3 = quantile(df3$numest, prob=c(0.75))
Q3
## 75%
## 2
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -0.5
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 3.5
Los outliers serán por lo tanto el número de establecimientos por empresa menores al Minimum < 0 (-0.5 carece de lógica) y mayores al Maximum > 3 (3.5 al ser número no entero carede de lógica)
Se parte como premisa de que estp es una variable cuantitativa discreta:
table(df3$estp)
##
## 0 1
## 4264 139
round(prop.table(table(df3$estp)) * 100, 2)
##
## 0 1
## 96.84 3.16
Sin embargo, se deduce que tenemos que 0 implica que NO existen establecimientos en otras provincias y 1 que SÍ. Se está por lo tanto ante una variable categórica o cualitativa nominal. NO existen el 96.84% y SÍ existen el 3.16%.
df4 <- df3 %>%
mutate(
estp = factor(estp, levels = c(0, 1), labels = c("No", "Sí"))
)
glimpse(df4)
## Rows: 4,403
## Columns: 17
## $ PROVINCIA <chr> "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp <fct> No, No, No, No, No, Sí, No, No, No, No, No, ~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100 <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~
Se representa gráficamente la variable con el objetivo de poder visualizar esta información:
plot(df4$estp, xlab = "Establecimientos en otras Provincias", ylab = "Cantidad", main = "Establecimientos en otras Provincias (estp)")
Se realiza un histograma en ggplot:
df4 %>%
ggplot(aes(estp)) +
labs(x = "Establecimientos en otras Provincias", y = "Cantidad") +
geom_bar(stat = "count") + ggtitle("Establecimientos en otras Provincias (estp)")
Mediante este apartado adicional, se intentará extraer alguna conclusión complementaria a las relaciones ya previamente descritas entre las variables.
Elimino las variables no numéricas y de momento las no originales (las añadidas a posteriori como información valiosa a partir de otra/s) para el dataframe que se utilizará para establecer dicha matriz. Se reducen el tamaño de algunos nombres de las variables renonbrándolos, para que la visualización de la matriz mejore:
dfmatrixc <- df4 %>%
select(-PROVINCIA, -estp, -PORCENTAJE_GASTO_CLIENTES, -coe_100) %>%
rename(P = PRODUCTIVIDAD, NE = `NÚMERO DE EMPLEADOS`)
glimpse(dfmatrixc)
## Rows: 4,403
## Columns: 13
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460637, 1.5939~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.738331, 6.79~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948, 76.54884,~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258, 1.261283,~
## $ P <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36.950680, 13~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.99~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808642624, 0.0~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, 1, 4, 19, 2~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 34, 34, 2, 3~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, 0, 1, 0, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, 1, 2, 1, 1,~
Se emplea el método Spearman (varibles no normales):
dfmatrixc.cor <- cor(dfmatrixc, method = "spearman")
round(dfmatrixc.cor, digits = 1)
## rentabieco rentabifin endp liq P VENTAS NE coe edad conce
## rentabieco 1.0 0.4 -0.5 0.4 0.2 0.2 0.2 0.2 0.1 0.0
## rentabifin 0.4 1.0 0.2 -0.1 0.2 -0.1 -0.1 0.0 -0.3 0.0
## endp -0.5 0.2 1.0 -0.7 0.0 -0.3 -0.3 -0.3 -0.4 0.0
## liq 0.4 -0.1 -0.7 1.0 0.0 0.1 0.1 0.1 0.2 0.0
## P 0.2 0.2 0.0 0.0 1.0 0.5 0.0 0.4 -0.1 0.2
## VENTAS 0.2 -0.1 -0.3 0.1 0.5 1.0 0.8 0.8 0.4 0.3
## NE 0.2 -0.1 -0.3 0.1 0.0 0.8 1.0 0.7 0.5 0.2
## coe 0.2 0.0 -0.3 0.1 0.4 0.8 0.7 1.0 0.4 0.1
## edad 0.1 -0.3 -0.4 0.2 -0.1 0.4 0.5 0.4 1.0 0.0
## conce 0.0 0.0 0.0 0.0 0.2 0.3 0.2 0.1 0.0 1.0
## numac 0.2 -0.1 -0.3 0.1 0.2 0.5 0.5 0.5 0.3 0.1
## numpa 0.1 -0.1 -0.2 0.1 0.1 0.3 0.3 0.3 0.3 0.1
## numest 0.1 0.0 -0.1 0.0 0.1 0.4 0.4 0.3 0.2 0.1
## numac numpa numest
## rentabieco 0.2 0.1 0.1
## rentabifin -0.1 -0.1 0.0
## endp -0.3 -0.2 -0.1
## liq 0.1 0.1 0.0
## P 0.2 0.1 0.1
## VENTAS 0.5 0.3 0.4
## NE 0.5 0.3 0.4
## coe 0.5 0.3 0.3
## edad 0.3 0.3 0.2
## conce 0.1 0.1 0.1
## numac 1.0 0.3 0.3
## numpa 0.3 1.0 0.2
## numest 0.3 0.2 1.0
Se elimina la diagonal puesto que no aporta información (una variable consigo misma tiene máxima correlación de 1), y nos quedamos con la parte superior (es simétrica) para una mejor visualización. Se ordena por correlación, teniendo por una parte en color más azul las variables que presentan una mayor correlación positiva y en rojo negativa:
corrplot(dfmatrixc.cor, method = "shade", tl.col = "black", tl.srt = 45, addCoef.col = "black", order = "AOE", type = "upper", diag = F)
Para todos los valores de correlación distintos a cero se tendrá correlación, sea ésta negativa o positiva entre los valores -1 y +1, respectivamente.
Ahora bien, se aprecia que existe una alta correlación entre VENTAS y Cuota de Mercado (coe) con 0.84, entre VENTAS y NÚMERO DE EMPLEADOS con 0.81 y entre NÚMERO DE EMPLEADOS y Cuota de mercado (coe) de 0.7. A partir de ahí, una ya más baja correlación en valores en torno a 0.5, a saber: VENTAS y Número de accionistas (numac) con 0.54; NÚMERO DE EMPLEADOS y edad con 0.53; PRODUCTIVIDAD y VENTAS con 0.49; NÚMERO DE EMPLEADOS y Número de accionistas (numac) con 0.49; VENTAS y edad con 0.41 y así sucesivamente aproximándonos cada vez más a correlaciones más cercanas a cero. Se tiene además una correlación negativa elevada de -0.66 entre Endeudamiento (endp) y Liquidez (liq), a priori lógica.
VENTAS y NÚMERO DE EMPLEADOS aparecen bastante, se tendrá en cuenta o no, pero es pertinente resaltarlo en este momento ya que llama la atención.
Se representan tres de ellas a modo de ejemplo, más la de correlación negativa.
dfmatrixc %>%
ggplot(aes(VENTAS, coe)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Cuota de mercado") +
ggtitle("Correlación Ventas vs Cuota de mercado")
## `geom_smooth()` using formula 'y ~ x'
dfmatrixc %>%
ggplot(aes(VENTAS, numac)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Número de accionistas") +
ggtitle("Correlación Ventas vs Número de accionistas")
## `geom_smooth()` using formula 'y ~ x'
Se aprecia claramente una correlación positiva entre ambas, a más ventas más empleados a menos ventas menos empleados, y viceversa. Llama la atención la gran concentración de empresas en la parte inicial de la rl, ¿o quizá no? España es un país de PYMES con el número estrella de “hasta 50 trabajadores” en el imaginario popular aunque puedan llegar por definición hasta los 250 (entra dentro de la lógica).
dfmatrixc %>%
ggplot(aes(VENTAS, edad)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Tiempo operando en el mercado") +
ggtitle("Correlación Ventas vs Tiempo operando en el mercado")
## `geom_smooth()` using formula 'y ~ x'
Se aprecia desde la primera hasta esta última una mayor dispersión conforme el índice de correlación se va acercando a cero.
dfmatrixc %>%
ggplot(aes(endp, liq)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Endeudamiento", y = "Liquidez") +
ggtitle("Endeudamiento vs Liquidez")
## `geom_smooth()` using formula 'y ~ x'
A mayor endeudamieno menor liquidez.
pairs(dfmatrixc)
GGally::ggpairs(dfmatrixc)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
Análisis del Comportamiento de las Ventas y Variables que le Afectan.
Hilando con el punto “Visión Global” del apartado anterior, se realiza la matriz de correlación para las variable numéricas, pero está vez el enfoque se situará sobre la variables VENTAS y aquellas otras variables que le puedan estar afectando.
Posteriormente a este subapartado se establecerá si la variable cualitativa nominal estp = Número de Establecimientos en otras Provincias: “No” o “Sí” afecta o no a VENTAS.
Elimino las variables no numéricas y de momento las no originales (las añadidas a posteriori como información valiosa a partir de otra/s) para el dataframe que se utilizará para establecer dicha matriz. Se reducen el tamaño de algunos nombres de las variables renonbrándolos, para que la visualización de la matriz mejore:
dfmatrixc <- df4 %>%
select(-PROVINCIA, -estp, -PORCENTAJE_GASTO_CLIENTES, -coe_100) %>%
rename(P = PRODUCTIVIDAD, NE = `NÚMERO DE EMPLEADOS`)
glimpse(dfmatrixc)
## Rows: 4,403
## Columns: 13
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460637, 1.5939~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.738331, 6.79~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948, 76.54884,~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258, 1.261283,~
## $ P <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36.950680, 13~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.99~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808642624, 0.0~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, 1, 4, 19, 2~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 34, 34, 2, 3~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, 0, 1, 0, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, 1, 2, 1, 1,~
Se emplea el método Spearman (varibles no normales):
dfmatrixc.cor <- cor(dfmatrixc, method = "spearman")
round(dfmatrixc.cor, digits = 1)
## rentabieco rentabifin endp liq P VENTAS NE coe edad conce
## rentabieco 1.0 0.4 -0.5 0.4 0.2 0.2 0.2 0.2 0.1 0.0
## rentabifin 0.4 1.0 0.2 -0.1 0.2 -0.1 -0.1 0.0 -0.3 0.0
## endp -0.5 0.2 1.0 -0.7 0.0 -0.3 -0.3 -0.3 -0.4 0.0
## liq 0.4 -0.1 -0.7 1.0 0.0 0.1 0.1 0.1 0.2 0.0
## P 0.2 0.2 0.0 0.0 1.0 0.5 0.0 0.4 -0.1 0.2
## VENTAS 0.2 -0.1 -0.3 0.1 0.5 1.0 0.8 0.8 0.4 0.3
## NE 0.2 -0.1 -0.3 0.1 0.0 0.8 1.0 0.7 0.5 0.2
## coe 0.2 0.0 -0.3 0.1 0.4 0.8 0.7 1.0 0.4 0.1
## edad 0.1 -0.3 -0.4 0.2 -0.1 0.4 0.5 0.4 1.0 0.0
## conce 0.0 0.0 0.0 0.0 0.2 0.3 0.2 0.1 0.0 1.0
## numac 0.2 -0.1 -0.3 0.1 0.2 0.5 0.5 0.5 0.3 0.1
## numpa 0.1 -0.1 -0.2 0.1 0.1 0.3 0.3 0.3 0.3 0.1
## numest 0.1 0.0 -0.1 0.0 0.1 0.4 0.4 0.3 0.2 0.1
## numac numpa numest
## rentabieco 0.2 0.1 0.1
## rentabifin -0.1 -0.1 0.0
## endp -0.3 -0.2 -0.1
## liq 0.1 0.1 0.0
## P 0.2 0.1 0.1
## VENTAS 0.5 0.3 0.4
## NE 0.5 0.3 0.4
## coe 0.5 0.3 0.3
## edad 0.3 0.3 0.2
## conce 0.1 0.1 0.1
## numac 1.0 0.3 0.3
## numpa 0.3 1.0 0.2
## numest 0.3 0.2 1.0
Se elimina la diagonal puesto que no aporta información (una variable consigo misma tiene máxima correlación de 1), y nos quedamos con la parte superior (es simétrica) para una mejor visualización. Se ordena por correlación, teniendo por una parte en color más azul las variables que presentan una mayor correlación positiva y en rojo negativa:
corrplot(dfmatrixc.cor, method = "shade", tl.col = "black", tl.srt = 45, addCoef.col = "black", order = "AOE", type = "upper", diag = F)
Para todos los valores de correlación distintos a cero se tendrá correlación, sea ésta negativa o positiva entre los valores -1 y +1, respectivamente.
Como se ha comentado previamente, el enfoque se situará sobre la variable VENTAS y aquellas otras variables que le puedan estar afectando:
VENTAS:
Previo a un análisis más profundo, se establece una visión general mediante la matriz de dispersión para este primer grupo de variables:
scatterplotMatrix(~ VENTAS + coe + NE, data = dfmatrixc,
regLine = list(col = "green",
lwd = 3),
smooth = list(col.smooth = "red",
col.smooth = "blue"))
Análisis más profundo:
Gráficos de puntos:
cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$coe, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$coe)
text(0.45, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfmatrixc %>%
ggplot(aes(VENTAS, coe)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Cuota de mercado") +
ggtitle("Correlación Ventas vs Cuota de mercado") +
annotate("label", x = 70000, y = 0.45, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Los outliers serán, como ya se analizó en apartado anterior, cuotas de mercado mayores al Maximum > 0.026. Se pueden quitar esos outliers para analizarlo de nuevo:
dfnooutliers <- dfmatrixc %>% filter(coe < 0.027)
cor.test(dfnooutliers$VENTAS, dfnooutliers$coe, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$coe, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dfnooutliers$VENTAS and dfnooutliers$coe
## S = 1845788131, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.8084816
p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco menor a la con outliers, pero alta: 0.81)
Gráficos de puntos:
cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$coe, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$coe)
text(0.025, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfnooutliers %>%
ggplot(aes(VENTAS, coe)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Cuota de mercado") +
ggtitle("Ventas vs Cuota de mercado") +
annotate("label", x = 60000, y = 0.03, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Conclusión: a más cuota de mercado, más ventas: visualizando los gráficos se aprecia como si existieran subconjuntos que siguen esta tendencia, pero de manera más o menos marcada dependiendo de la inclinación de su línea de tendencia.
Gráficos de puntos:
cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$NE, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$NE)
text(160, 75000, glue::glue("r = {round(cor_coef, 2)}"))
dfmatrixc %>%
ggplot(aes(VENTAS, NE)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Número de Empleados") +
ggtitle("Ventas vs Número de Empleados") +
annotate("label", x = 75000, y = 165, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Primera conclusión: ¿se aprecia que a más empleados más ventas y a menos empleados menos ventas?. En un primer vistazo sí, pero se aprecian también tanto números de empleados altos con bajos niveles de ventas, como número de empleados bajos con altos nives de ventas. Se analizarán por lo tanto los outliers a continuación.
También llama la atención la gran concentración de empresas en la parte inicial de la rl, ¿o quizá no? España es un país de PYMES con el número estrella de “hasta 50 trabajadores” en el imaginario popular aunque puedan llegar por definición hasta los 250.
Se van a analizar los valores atípicos del número de empleados, los outliers se pueden observar en valores más allá de los bigotes del diagrama Boxplot, tanto por la parte inferior Minimum, como por la superior Maximum. Se tendrá:
Q1 = quantile(dfmatrixc$NE, prob=c(0.25))
Q1
## 25%
## 3
Q3 = quantile(dfmatrixc$NE, prob=c(0.75))
Q3
## 75%
## 21
IQR = Q3 - Q1
Minimum = Q1 - 1.5 * IQR
Minimum
## 25%
## -24
Maximum = Q3 + 1.5 * IQR
Maximum
## 75%
## 48
Los outliers serán por lo tanto el número de empleados mayores al Maximum > 48:
dfnooutliers <- dfmatrixc %>% filter(NE < 49)
cor.test(dfnooutliers$VENTAS, dfnooutliers$NE, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$NE, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dfnooutliers$VENTAS and dfnooutliers$NE
## S = 2611721642, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.7621755
p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco menor a la con outliers, pero alta: 0.76)
Gráficos de puntos:
cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$NE, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$NE)
text(42, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfnooutliers %>%
ggplot(aes(VENTAS, NE)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Número de Empleados") +
ggtitle("Ventas vs Número de Empleados") +
annotate("label", x = 65000, y = 55, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Conclusión: a más empleados más ventas y a menos empleados menos ventas.
Previo a un análisis más profundo, se establece una visión general mediante la matriz de dispersión para este segundo grupo de variables:
scatterplotMatrix(~ VENTAS + numac + P + numest + edad, data = dfmatrixc,
regLine = list(col = "green",
lwd = 3),
smooth = list(col.smooth = "red",
col.smooth = "blue"))
Análisis más profundo:
Gráficos de puntos:
cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$numac, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$numac)
text(15, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfmatrixc %>%
ggplot(aes(VENTAS, numac)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Número de Accionistas") +
ggtitle("Correlación Ventas vs Número de Accionistas") +
annotate("label", x = 70000, y = 15, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Los outliers serán, como ya se analizó en apartado anterior, número de accionistas mayores al Maximum > 5. Se pueden quitar esos outliers para analizarlo de nuevo:
dfnooutliers <- dfmatrixc %>% filter(numac < 6)
cor.test(dfnooutliers$VENTAS, dfnooutliers$numac, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$numac, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dfnooutliers$VENTAS and dfnooutliers$numac
## S = 6273166988, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.5334638
p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco menor a la con outliers: 0.53)
Gráficos de puntos:
cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$numac, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$numac)
text(4.5, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfnooutliers %>%
ggplot(aes(VENTAS, numac)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Número de Accionistas") +
ggtitle("Ventas vs Número de Accionistas") +
annotate("label", x = 70000, y = 4.5, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Conclusión: la concentración de ventas se presenta para entidades con número de hasta 5 accionistas. A partir de entidades con 6 accionistas es bastante dispersa y variada y la concentración es significativamente menor, con mayor tendencia a menores ventas en relación a las entidades de hasta 5 accionistas en las que si se evidencian casos de ventas mayores.
Gráficos de puntos:
cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$P, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$P)
text(250, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfmatrixc %>%
ggplot(aes(VENTAS, P)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "PRODUCTIVIDAD") +
ggtitle("Correlación Ventas vs PRODUCTIVIDAD") +
annotate("label", x = 70000, y = 250, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Los outliers serán, como ya se analizó en apartado anterior, productividades mayores al Maximum > 39.33. Se pueden quitar esos outliers para analizarlo de nuevo:
dfnooutliers <- dfmatrixc %>% filter(P < 39.34)
cor.test(dfnooutliers$VENTAS, dfnooutliers$P, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$P, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dfnooutliers$VENTAS and dfnooutliers$P
## S = 5087511378, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.5515454
p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (un poco mayor a la con outliers: 0.55)
Gráficos de puntos:
cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$P, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$P)
text(36, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfnooutliers %>%
ggplot(aes(VENTAS, P)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "PRODUCTIVIDAD") +
ggtitle("Ventas vs PRODUCTIVIDAD") +
annotate("label", x = 65000, y = 36, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Conclusión: el grueso de ratios de productividad se encuentra entre 5 y 20, y para dichos ratios se observa la existencia de niveles de ventas vsriados pero también los más elevados. A partir de estos valores y en concreto de entorno a 40 los outliers arrogan cifras de niveles dispersas pero contendencia a ser menores.
Gráficos de puntos:
cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$numest, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$numest)
text(30, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfmatrixc %>%
ggplot(aes(VENTAS, numest)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Número de Establecimientos por Empresa") +
ggtitle("Correlación Ventas vs Número de Establecimientos por Empresa") +
annotate("label", x = 70000, y = 30, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Los outliers serán, como ya se analizó en apartado anterior, número de establecimientos por empresa mayores al Maximum > 3. Se pueden quitar esos outliers para analizarlo de nuevo:
dfnooutliers <- dfmatrixc %>% filter(numest < 4)
cor.test(dfnooutliers$VENTAS, dfnooutliers$numest, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$numest, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dfnooutliers$VENTAS and dfnooutliers$numest
## S = 7667320950, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.3231458
p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (menor a la con outliers: 0.32)
Gráficos de puntos:
cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$numest, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$numest)
text(2.75, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfnooutliers %>%
ggplot(aes(VENTAS, numest)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Número de Establecimientos por Empresa") +
ggtitle("Ventas vs Número de Establecimientos por Empresa") +
annotate("label", x = 58000, y = 2.75, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Conclusión: la concentración de ventas hasta unos valores medios de las mismas, se presenta para un número de establecimientos por empresa de hasta 4. A partir de 4 es bastante dispersa en cuanto a ventas y la concentración es significativamente menor.
Gráficos de puntos:
cor_coef = cor(dfmatrixc$VENTAS, dfmatrixc$edad, method = "spearman")
plot(dfmatrixc$VENTAS ~ dfmatrixc$edad)
text(47, 72000, glue::glue("r = {round(cor_coef, 2)}"))
dfmatrixc %>%
ggplot(aes(VENTAS, edad)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Tiempo Operando en el Mercado (años)") +
ggtitle("Correlación Ventas vs Tiempo Operando en el Mercado (años)") +
annotate("label", x = 72000, y = 47, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Los outliers serán, como ya se analizó en apartado anterior, tiempo operando en el mercado mayor al Maximum > 37 años. Se pueden quitar esos outliers para analizarlo de nuevo:
dfnooutliers <- dfmatrixc %>% filter(edad < 38)
cor.test(dfnooutliers$VENTAS, dfnooutliers$edad, method = "spearman")
## Warning in cor.test.default(dfnooutliers$VENTAS, dfnooutliers$edad, method =
## "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dfnooutliers$VENTAS and dfnooutliers$edad
## S = 8113724045, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.3961622
p-value < 2.2e-16 < 0.05 -> Sigue habiendo correlación (menor a la con outliers: 0.40)
Gráficos de puntos:
cor_coef = cor(dfnooutliers$VENTAS, dfnooutliers$edad, method = "spearman")
plot(dfnooutliers$VENTAS ~ dfnooutliers$edad)
text(35, 65000, glue::glue("r = {round(cor_coef, 2)}"))
dfnooutliers %>%
ggplot(aes(VENTAS, edad)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "Ventas", y = "Tiempo Operando en el Mercado (años)") +
ggtitle("Ventas vs Tiempo Operando en el Mercado (años)") +
annotate("label", x = 70000, y = 36, label = glue::glue("r = {round(cor_coef, 2)}"))
## `geom_smooth()` using formula 'y ~ x'
Conclusión: el grueso de tiempo operando en el mercado se encuentra entre los 5 y los 18 años aproximadamente y es donde se observa la presencia de gran cantidad de valores de ventas bajos. También existen para ellos valores medios y altos, pero en menor medida. Para los outliers a partir de 37 años, hay mucha dispersión, con valores tanto bajos, medios y altos de ventas.
Se establece una visión general mediante la matriz de dispersión para este tercer grupo de variables:
scatterplotMatrix(~ VENTAS + numpa + endp + conce + rentabieco, data = dfmatrixc,
regLine = list(col = "green",
lwd = 3),
smooth = list(col.smooth = "red",
col.smooth = "blue"))
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
Y no se realiza un análisis más profundo al presentarse correlaciones muy bajas:
7.- Número de Participados (numpa): 0.33 8.- Nivel de Endeudamiento (endp): -0.28 (negativa) 9.- Entidades Similares en el Municipio (conce): 0.26 10.- Rentabilidad Económica (rentabieco): 0.24
Se establece una visión general mediante la matriz de dispersión para este cuarto grupo de variables:
scatterplotMatrix(~ VENTAS + liq + rentabifin, data = dfmatrixc,
regLine = list(col = "green",
lwd = 3),
smooth = list(col.smooth = "red",
col.smooth = "blue"))
Y no se realiza un análisis más profundo al presentarse correlaciones extremadamente bajas:
11.- Liquidez (liq): 0.14 12.- Rentabilidad Financiera (rentabifin): -0.05
Se establecerá si la variable cualitativa nominal estp = Número de Establecimientos en otras Provincias: “No” o “Sí” afecta o no a VENTAS.
Nos encontramos ante una variable cuantitativa contínua: VENTAS y otra cualitativa u categórica: estp = Número de Establecimientos en otras Provincias.
Para ver si hay asociación entre ellas y teniendo en cuenta que VENTAS presenta una distribución no normal, como ya ha sido analizado anteriormente, se empleará la U de Mann Whitney:
wilcox.test(VENTAS ~ estp, df4)
##
## Wilcoxon rank sum test with continuity correction
##
## data: VENTAS by estp
## W = 146090, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
p-value < 2.2e-16 es < 0.05 por lo que existirá asociación.
Se procede por lo tanto, a su análisis gráfico:
Como primer paso, se representa gráficamente la variable estp con el objetivo de poder visualizarla y ser conscientes de la información que pudiera aportar:
plot(df4$estp, xlab = "Establecimientos en otras Provincias", ylab = "Cantidad", main = "Establecimientos en otras Provincias (estp)")
Se realiza un histograma en ggplot:
df4 %>%
ggplot(aes(estp)) +
labs(x = "Establecimientos en otras Provincias", y = "Cantidad") +
geom_bar(stat = "count") + ggtitle("Establecimientos en otras Provincias (estp)")
table(df3$estp)
##
## 0 1
## 4264 139
round(prop.table(table(df3$estp)) * 100, 2)
##
## 0 1
## 96.84 3.16
NO existen el 96.84% de los caso y SÍ existen el 3.16% de ellos.
plot(VENTAS ~ estp, df4)
medians <- aggregate(VENTAS ~ estp, df4, median)
medians <- transform(medians, VENTAS = as.integer(VENTAS))
df4 %>%
ggplot(aes(x = estp, y = VENTAS, fill = estp)) +
geom_boxplot() +
labs(x = "Establecimientos en otras Provincias", y = "Ventas") +
ggtitle("Ventas vs Establecimientos en otras Provincias (estp)") +
stat_summary(fun = median, colour = "darkred", geom = "point", shape = 12, size = 2, show.legend = FALSE) +
geom_text(data = medians, aes(label = VENTAS, y = VENTAS + 3000))
Conclusiones:
1.- Existe asociación entre ventas y el que haya establecimientos en otras provincias o no.
2.- No existen establecimientos en otras provincias en el 96.84% de los casos y sí existen el 3.16% de ellos.
3.- Las ventas para los casos en los que no existen establecimientos en otras provincias presentan unas ventas mucho menores (mediana de 1488 y rango intercuartil IQR mucho más pequeño) que para los que sí (mediana de 10778 y rango intercuartil IQR mucho mayor). De hecho Q1_Sí > Mediana_No y Q3_No < Median_Sí.
¡Expándansen por las provincias! €
Realizar una tabla de contingencia entre Ventas y Número de empleados, una vez categorizadas ambas variables, para número de empleados, por ejemplo, la utilizada a nivel Europeo, la cual divide a las empresas en Microempresas (1-9 trabajadores), Pequeña empresa (10-49 trabajadores), Mediana empresa (50-249 trabajadores) y Gran empresa (250 y más trabajadores)).
df5 <- df4 %>%
select(VENTAS, `NÚMERO DE EMPLEADOS`) %>%
rename(V = VENTAS, NE = `NÚMERO DE EMPLEADOS`)
glimpse(df5)
## Rows: 4,403
## Columns: 2
## $ V <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.994, 272.7~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1, 1, 1, ~
psych::describe(df5$V)
## vars n mean sd median trimmed mad min max range
## X1 1 4403 6648.16 11177.25 1592.14 3957.77 2087.55 4.92 77055.79 77050.87
## skew kurtosis se
## X1 2.81 9.1 168.45
summary(df5$V)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.92 494.89 1592.14 6648.16 7819.91 77055.79
psych::describe(df5$NE)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 4403 16.34 22.54 7 11.45 7.41 1 169 168 2.6 8.53 0.34
summary(df5$NE)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 3.00 7.00 16.34 21.00 169.00
V: (4.92, 77055.79) NE: (1, 169)
Categorización estándar de una empresa por sus ventas: se denomina Microempresa a aquella cuyas ventas anuales no exceden de 150 UIT. Se denomina Pequeña Empresa a aquella cuyas ventas anuales sobrepasan las 150 UIT pero no exceden de 1700 UIT.Asimismo, la mediana empresa será la que tenga ventas anuales superiores a 1700 UIT y hasta un monto máximo de 2300 UIT. Se considera gran empresa a aquella cuyas ventas anuales son mayores a 2300 UIT.
Segun el Código Tributario, la Unidad Impositiva Tributaria (UIT) es un valor de referencia que puede ser utilizado en las normas tributarias, entre otros.
df5Categorizada <- df5 %>%
mutate(EMPLEADOS = case_when(NE < 10 ~ "Mi (E)",
NE > 9 & NE < 50 ~ "P (E)",
NE > 49 & NE < 250 ~ "Me (E)"),
VENTAS = case_when(V < 151 ~ "Mi (V)",
V > 150 & V < 1701 ~ "P (V)",
V > 1700 & V < 2301 ~ "Me (V)",
T ~ "G (V)")
)
glimpse(df5Categorizada)
## Rows: 4,403
## Columns: 4
## $ V <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.994~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1,~
## $ EMPLEADOS <chr> "Mi (E)", "Mi (E)", "P (E)", "P (E)", "Mi (E)", "Me (E)", "M~
## $ VENTAS <chr> "P (V)", "P (V)", "G (V)", "G (V)", "P (V)", "G (V)", "P (V)~
table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
##
## Me (E) Mi (E) P (E)
## G (V) 339 397 1219
## Me (V) 0 138 65
## Mi (V) 0 340 2
## P (V) 2 1686 215
round(prop.table(table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)) * 100, 2)
##
## Me (E) Mi (E) P (E)
## G (V) 7.70 9.02 27.69
## Me (V) 0.00 3.13 1.48
## Mi (V) 0.00 7.72 0.05
## P (V) 0.05 38.29 4.88
gmodels::CrossTable(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 4403
##
##
## | df5Categorizada$EMPLEADOS
## df5Categorizada$VENTAS | Me (E) | Mi (E) | P (E) | Row Total |
## -----------------------|-----------|-----------|-----------|-----------|
## G (V) | 339 | 397 | 1219 | 1955 |
## | 232.418 | 481.727 | 458.076 | |
## | 0.173 | 0.203 | 0.624 | 0.444 |
## | 0.994 | 0.155 | 0.812 | |
## | 0.077 | 0.090 | 0.277 | |
## -----------------------|-----------|-----------|-----------|-----------|
## Me (V) | 0 | 138 | 65 | 203 |
## | 15.722 | 3.362 | 0.255 | |
## | 0.000 | 0.680 | 0.320 | 0.046 |
## | 0.000 | 0.054 | 0.043 | |
## | 0.000 | 0.031 | 0.015 | |
## -----------------------|-----------|-----------|-----------|-----------|
## Mi (V) | 0 | 340 | 2 | 342 |
## | 26.487 | 100.051 | 112.623 | |
## | 0.000 | 0.994 | 0.006 | 0.078 |
## | 0.000 | 0.133 | 0.001 | |
## | 0.000 | 0.077 | 0.000 | |
## -----------------------|-----------|-----------|-----------|-----------|
## P (V) | 2 | 1686 | 215 | 1903 |
## | 143.409 | 302.999 | 289.994 | |
## | 0.001 | 0.886 | 0.113 | 0.432 |
## | 0.006 | 0.658 | 0.143 | |
## | 0.000 | 0.383 | 0.049 | |
## -----------------------|-----------|-----------|-----------|-----------|
## Column Total | 341 | 2561 | 1501 | 4403 |
## | 0.077 | 0.582 | 0.341 | |
## -----------------------|-----------|-----------|-----------|-----------|
##
##
mosaicplot(VENTAS ~ EMPLEADOS, data = df5Categorizada,
main = "Ventas vs Número de Empleados", shade = TRUE, legend = TRUE)
## Warning: In mosaicplot.default(table(mf), main = main, ...) :
## extra argument 'legend' will be disregarded
df5Categorizada %>%
ggplot(aes(x = VENTAS, fill = EMPLEADOS)) +
geom_bar(stat = "count", position ="dodge")
Sorprende que el criterio de definición de empresa según estándares de número de empleados (Micro, Pequeña, Mediana) tenga un nivel de coincidencia tan bajo con sus correpondientes definiciones oficiales según estándares de ventas (Micro, Pequeña, Mediana y Grande). Por ejemplo Grandes según criterio Ventas encaja con 1955 Micro + Pequeñas + Medianas según criterio Número de Empleados (¡44% de las entidades!) y Mediana según Ventas con 0 empresas Mediana según Número de Empleados. No se trata de que coincidan, sino que para que una empresa pueda realmente denominarse Microempresa, Pequeña o Mediana debe cumplir ambos requisitos de denición, tanto en número de empleados como en ventas.
Sería interesante poder ponerse en contacto con la empresa que ha suministrado estos datos para recabar más información al respecto. Quizá las ventas no estén expresadas en UIT, sino en € o en K€. No se dispone de suficiciente información, pero parece interesante realizar un último intento/análisis con algo que también pudiera parecer lógico con respecto a las ventas, que estén expresadas en K€, con los siguientes criterios:
Microempresas < 2000k€ Pequeñas > 2000k€ y < 10000k€ Medianas > 10000k€ y < 50000k€
df5Categorizada <- df5 %>%
mutate(EMPLEADOS = case_when(NE < 10 ~ "Mi (E)",
NE > 9 & NE < 50 ~ "P (E)",
NE > 49 & NE < 250 ~ "Me (E)"),
VENTAS = case_when(V < 2000 ~ "Mi (V)",
V > 1999 & V < 10000 ~ "P (V)",
V > 9999 & V < 50000 ~ "Me (V)",
T ~ "G (V)")
)
glimpse(df5Categorizada)
## Rows: 4,403
## Columns: 4
## $ V <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070.994~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10, 1,~
## $ EMPLEADOS <chr> "Mi (E)", "Mi (E)", "P (E)", "P (E)", "Mi (E)", "Me (E)", "M~
## $ VENTAS <chr> "Mi (V)", "Mi (V)", "Me (V)", "Me (V)", "Mi (V)", "Me (V)", ~
table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
##
## Me (E) Mi (E) P (E)
## G (V) 66 0 4
## Me (V) 263 27 546
## Mi (V) 2 2106 251
## P (V) 10 428 700
round(prop.table(table(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)) * 100, 2)
##
## Me (E) Mi (E) P (E)
## G (V) 1.50 0.00 0.09
## Me (V) 5.97 0.61 12.40
## Mi (V) 0.05 47.83 5.70
## P (V) 0.23 9.72 15.90
gmodels::CrossTable(df5Categorizada$VENTAS, df5Categorizada$EMPLEADOS)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 4403
##
##
## | df5Categorizada$EMPLEADOS
## df5Categorizada$VENTAS | Me (E) | Mi (E) | P (E) | Row Total |
## -----------------------|-----------|-----------|-----------|-----------|
## G (V) | 66 | 0 | 4 | 70 |
## | 676.918 | 40.715 | 16.534 | |
## | 0.943 | 0.000 | 0.057 | 0.016 |
## | 0.194 | 0.000 | 0.003 | |
## | 0.015 | 0.000 | 0.001 | |
## -----------------------|-----------|-----------|-----------|-----------|
## Me (V) | 263 | 27 | 546 | 836 |
## | 607.061 | 433.758 | 239.033 | |
## | 0.315 | 0.032 | 0.653 | 0.190 |
## | 0.771 | 0.011 | 0.364 | |
## | 0.060 | 0.006 | 0.124 | |
## -----------------------|-----------|-----------|-----------|-----------|
## Mi (V) | 2 | 2106 | 251 | 2359 |
## | 178.720 | 392.531 | 380.533 | |
## | 0.001 | 0.893 | 0.106 | 0.536 |
## | 0.006 | 0.822 | 0.167 | |
## | 0.000 | 0.478 | 0.057 | |
## -----------------------|-----------|-----------|-----------|-----------|
## P (V) | 10 | 428 | 700 | 1138 |
## | 69.270 | 82.664 | 251.002 | |
## | 0.009 | 0.376 | 0.615 | 0.258 |
## | 0.029 | 0.167 | 0.466 | |
## | 0.002 | 0.097 | 0.159 | |
## -----------------------|-----------|-----------|-----------|-----------|
## Column Total | 341 | 2561 | 1501 | 4403 |
## | 0.077 | 0.582 | 0.341 | |
## -----------------------|-----------|-----------|-----------|-----------|
##
##
mosaicplot(VENTAS ~ EMPLEADOS, data = df5Categorizada,
main = "Ventas vs Número de Empleados", shade = TRUE, legend = TRUE)
## Warning: In mosaicplot.default(table(mf), main = main, ...) :
## extra argument 'legend' will be disregarded
df5Categorizada %>%
ggplot(aes(x = VENTAS, fill = EMPLEADOS)) +
geom_bar(stat = "count", position ="dodge")
Existe en este caso más coincidencia entre ambos criterios (mayor lógica a priori), así apenas 70 entidades son consideradas como Grandes según criterio de ventas (1.6%) y por ejemplo existe mucha coincidencia en Microempresas y Pequeñas según ambos criterios.
Comparar las ventas entre Madrid y Barcelona.
La simplificación facilitará el análisis: totas las provincias con su total de ventas ordenadas de mayor a menor:
dfVENTASPROVINCIAS <- df4 %>%
select(PROVINCIA, VENTAS)
dfVENTASPROVINCIASsum <- aggregate(dfVENTASPROVINCIAS$VENTAS, by=list(PROVINCIA = dfVENTASPROVINCIAS$PROVINCIA), FUN = sum)
dfVENTASPROVINCIASsum <- dfVENTASPROVINCIASsum %>%
arrange(-x)
dfVENTASPROVINCIASsum <- dfVENTASPROVINCIASsum %>%
rename(VENTAS = x)
glimpse(dfVENTASPROVINCIASsum)
## Rows: 52
## Columns: 2
## $ PROVINCIA <chr> "Barcelona", "Madrid", "Valencia", "Alicante", "Sevilla", "M~
## $ VENTAS <dbl> 4149530.5, 3818090.6, 1920361.1, 1337031.5, 1277234.7, 10254~
Provincia con su total de entidades ordenadas de mayor a menor puede ser útil como información:
dfPROVINCIAStotal <- dfVENTASPROVINCIAS %>%
group_by(PROVINCIA) %>%
summarise(Total_Entidades = n()) %>%
arrange(-Total_Entidades)
glimpse(dfPROVINCIAStotal)
## Rows: 52
## Columns: 2
## $ PROVINCIA <chr> "Barcelona", "Madrid", "Valencia", "Alicante", "Sevill~
## $ Total_Entidades <int> 546, 473, 253, 216, 163, 134, 130, 129, 126, 108, 99, ~
Respecto a la comparativa entre las ventas entre Madrid y Barcelona se puede decir que Barcelona supera a Madrid en ventas (esto seguro que te gusta Eudald) :)) con 4149530.53 y 3818090.59 respectivamente. A nivel del estado ocupan la primera y segunda posición en ranking de ventas:
dfBCN_MDR <- head(dfVENTASPROVINCIASsum, 2)
glimpse(dfBCN_MDR)
## Rows: 2
## Columns: 2
## $ PROVINCIA <chr> "Barcelona", "Madrid"
## $ VENTAS <dbl> 4149531, 3818091
Se representa visualmente:
dfBCN_MDR %>%
ggplot(aes(x = PROVINCIA, y = VENTAS, fill = PROVINCIA)) +
geom_bar(stat = "identity") +
theme_minimal() +
geom_text(aes(label = round(VENTAS, 0)), vjust = 1.6, color = "black",
position = position_dodge(0.9), size = 4.5) +
ggtitle("Ventas en Madrid y Barcelona")
No se pide, pero me parece interesante y lógico a priori que también el número de entidades sea mayor en Barcelona que en Madrid:
head(dfPROVINCIAStotal, 2)
## # A tibble: 2 x 2
## PROVINCIA Total_Entidades
## <chr> <int>
## 1 Barcelona 546
## 2 Madrid 473
Se procede a continuación a establecer una comparativa entre ambas provincias mediante gráficos de bigotes, y una serie de descriptivos que aportarán información relevante:
dfVENTASPROVINCIAS_madrid_o_bcn <- dfVENTASPROVINCIAS %>%
filter(PROVINCIA == "Madrid" | PROVINCIA == "Barcelona")
medians <- aggregate(VENTAS ~ PROVINCIA, dfVENTASPROVINCIAS_madrid_o_bcn, median)
medians <- transform(medians, VENTAS = as.integer(VENTAS))
dfVENTASPROVINCIAS_madrid_o_bcn %>%
ggplot(aes(x = PROVINCIA, y = VENTAS, fill = PROVINCIA)) +
geom_boxplot() +
labs(x = "Provincias de Madrid y Barcelona", y = "Ventas") +
ggtitle("Ventas vs Provincias de Madrid y Barcelona") +
stat_summary(fun = median, colour = "darkred", geom = "point", shape = 12, size = 2, show.legend = FALSE) +
geom_text(data = medians, aes(label = VENTAS, y = VENTAS + 3000))
Madrid:
dfVENTASPROVINCIAS_madrid <- dfVENTASPROVINCIAS_madrid_o_bcn %>%
filter(PROVINCIA == "Madrid")
psych::describe(dfVENTASPROVINCIAS_madrid$VENTAS)
## vars n mean sd median trimmed mad min max range skew
## X1 1 473 8072.07 13871.67 1827.71 4602.85 2505.76 5.8 73605.16 73599.35 2.56
## kurtosis se
## X1 6.6 637.82
summary(dfVENTASPROVINCIAS_madrid$VENTAS)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.8 451.2 1827.7 8072.1 8622.3 73605.2
Barcelona:
dfVENTASPROVINCIAS_bcn <- dfVENTASPROVINCIAS_madrid_o_bcn %>%
filter(PROVINCIA == "Barcelona")
psych::describe(dfVENTASPROVINCIAS_bcn$VENTAS)
## vars n mean sd median trimmed mad min max range skew
## X1 1 546 7599.87 12042.53 1855.45 4759.35 2382.38 4.92 65683.8 65678.88 2.36
## kurtosis se
## X1 5.73 515.37
summary(dfVENTASPROVINCIAS_bcn$VENTAS)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.92 590.37 1855.45 7599.87 9790.40 65683.80
Conclusiones adicionales: la mediana de los establecimientos es superior en Barcelona: 1855 frente a 1827. Rango intercuartil entre el tercer y el primer cuartil mayor en Barcelona que en Madrid y ambos valores mayores también en Barcelona, es decir, una mayor concentración en el grueso intercuartil. Se aprecia mayor dispersión en Madrid con valores máximos mayores a los de Barcelona, es decir, se tiene por ejemplo en Madrid un establecimiento con Ventas de 73605 frente al máximo en Barcelona de Ventas de 65684. Por lo tanto se podría apuntar de lo expuesto, que presentando Barcelona unas Ventas mayores que Madrid, es Madrid la que tienen valores más extremos y dispersos de Ventas en sus establecimientos.
Presentación del modelo de predicción de las ventas para el siguiente año y describirla adecuadamente.
Basándonos en df4 se creará un df de trabajo al que se denominará dfmpv, dfmpv1, dfmpv2 (Modelo de Predicción de Ventas) en el que se se renombra NUMERO DE EMPLEADOS A NE, se pasa PROVINCIA a factor, se usa coe_100 en sustitución a coe por su mayor claridad, se establece la variable ACTIVO_CORRIENTE como la liquidez x las deudas (liq * endp) eliminando por lo tanto ambas variblaes implicadas: endp y liq por su evidente alta correlación y se deja presente PORCENTAJE_GASTO_CLIENTE ya que se piensa que pudiera ayudar a sacar algún tipo de conclusión, como ya se comento previavente en el “Ejercicio 1”, eliminando por lo tanto las varibles implicadas: PRODUCTIVIDAD y NE por su evidente alta correlación:
dfmpv <- df4 %>%
rename(NE = `NÚMERO DE EMPLEADOS`) %>%
mutate(PROVINCIA = factor(PROVINCIA),
ACTIVO_CORRIENTE = liq * endp)
glimpse(dfmpv)
## Rows: 4,403
## Columns: 18
## $ PROVINCIA <fct> Albacete, Albacete, Albacete, Albacete, Alba~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.3~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.00~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp <fct> No, No, No, No, No, Sí, No, No, No, No, No, ~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100 <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~
## $ ACTIVO_CORRIENTE <dbl> 98.876429, 99.999992, 71.166027, 85.534369, ~
dfmpv1 <- dfmpv %>%
subset(select = -c(endp, liq, PRODUCTIVIDAD, NE, coe))
glimpse(dfmpv1)
## Rows: 4,403
## Columns: 13
## $ PROVINCIA <fct> Albacete, Albacete, Albacete, Albacete, Alba~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, ~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 123~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10,~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, ~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ estp <fct> No, No, No, No, No, Sí, No, No, No, No, No, ~
## $ PORCENTAJE_GASTO_CLIENTES <dbl> 90.95005, 56.73360, 96.95069, 96.30156, 94.0~
## $ coe_100 <dbl> 0.49253717, 0.13123345, 6.87133406, 8.086426~
## $ ACTIVO_CORRIENTE <dbl> 98.876429, 99.999992, 71.166027, 85.534369, ~
Tras este análisis y tratamiento, el conjunto de datos queda más limpio (dfmpv) para la posterior extracción de conclusiones.
model <- lm(VENTAS ~., dfmpv1)
summary(model)
##
## Call:
## lm(formula = VENTAS ~ ., data = dfmpv1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -93002 -3389 -1100 1648 54736
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -8.030e+03 1.491e+03 -5.386 7.60e-08 ***
## PROVINCIAAlbacete -5.200e+02 1.692e+03 -0.307 0.758656
## PROVINCIAAlicante 5.233e+03 1.410e+03 3.712 0.000208 ***
## PROVINCIAAlmería 9.118e+02 1.680e+03 0.543 0.587339
## PROVINCIAAsturias 4.333e+03 1.538e+03 2.816 0.004880 **
## PROVINCIAÁvila -8.367e+03 2.293e+03 -3.648 0.000267 ***
## PROVINCIABadajoz 2.114e+03 1.641e+03 1.289 0.197535
## PROVINCIABaleares 2.523e+03 1.470e+03 1.717 0.086032 .
## PROVINCIABarcelona 6.114e+03 1.357e+03 4.506 6.77e-06 ***
## PROVINCIABurgos 4.266e+02 1.729e+03 0.247 0.805131
## PROVINCIACáceres -3.372e+03 1.811e+03 -1.863 0.062594 .
## PROVINCIACádiz 2.572e+03 1.573e+03 1.635 0.102073
## PROVINCIACantabria 2.094e+03 1.713e+03 1.222 0.221594
## PROVINCIACastellón 2.034e+03 1.638e+03 1.242 0.214404
## PROVINCIACEUTA -1.742e+04 2.548e+03 -6.838 9.18e-12 ***
## PROVINCIACiudad Real 7.546e+02 1.650e+03 0.457 0.647382
## PROVINCIACórdoba 3.509e+03 1.557e+03 2.254 0.024222 *
## PROVINCIACuenca -5.492e+03 1.970e+03 -2.788 0.005324 **
## PROVINCIAGerona 3.360e+03 1.471e+03 2.285 0.022375 *
## PROVINCIAGranada 1.618e+03 1.622e+03 0.998 0.318400
## PROVINCIAGuadalajara -7.412e+03 2.166e+03 -3.422 0.000628 ***
## PROVINCIAGuipúzcoa 2.840e+03 1.629e+03 1.744 0.081218 .
## PROVINCIAHuelva -3.160e+02 1.835e+03 -0.172 0.863305
## PROVINCIAHuesca -5.675e+02 1.746e+03 -0.325 0.745192
## PROVINCIAJaén 2.100e+03 1.620e+03 1.296 0.194886
## PROVINCIALa Coruña 4.051e+03 1.475e+03 2.746 0.006053 **
## PROVINCIALas Palmas 3.362e+03 1.540e+03 2.183 0.029078 *
## PROVINCIALeón 7.054e+02 1.616e+03 0.437 0.662439
## PROVINCIALérida 1.735e+03 1.571e+03 1.105 0.269394
## PROVINCIALogroño 4.778e+02 1.786e+03 0.267 0.789149
## PROVINCIALugo 8.627e+02 1.637e+03 0.527 0.598294
## PROVINCIAMadrid 6.138e+03 1.378e+03 4.453 8.70e-06 ***
## PROVINCIAMálaga 5.896e+03 1.465e+03 4.026 5.78e-05 ***
## PROVINCIAMELILLA -2.885e+04 3.002e+03 -9.611 < 2e-16 ***
## PROVINCIAMurcia 5.398e+03 1.499e+03 3.600 0.000322 ***
## PROVINCIANavarra 3.172e+03 1.666e+03 1.904 0.056990 .
## PROVINCIAOrense -2.011e+03 1.862e+03 -1.080 0.280286
## PROVINCIAPalencia -5.995e+03 2.166e+03 -2.768 0.005670 **
## PROVINCIAPontevedra 4.012e+03 1.515e+03 2.649 0.008096 **
## PROVINCIASalamanca -3.232e+03 1.776e+03 -1.820 0.068843 .
## PROVINCIASegovia -1.328e+04 2.348e+03 -5.657 1.64e-08 ***
## PROVINCIASevilla 5.982e+03 1.440e+03 4.156 3.31e-05 ***
## PROVINCIASoria -1.412e+04 2.476e+03 -5.702 1.26e-08 ***
## PROVINCIASta. Cruz de Tenerife 2.950e+03 1.535e+03 1.922 0.054632 .
## PROVINCIATarragona 3.227e+03 1.582e+03 2.041 0.041338 *
## PROVINCIATeruel -5.890e+03 1.970e+03 -2.990 0.002807 **
## PROVINCIAToledo 2.371e+03 1.589e+03 1.493 0.135568
## PROVINCIAValencia 6.251e+03 1.397e+03 4.474 7.87e-06 ***
## PROVINCIAValladolid 2.462e+03 1.672e+03 1.472 0.141000
## PROVINCIAVizcaya 5.103e+03 1.513e+03 3.372 0.000753 ***
## PROVINCIAZamora -4.927e+03 1.950e+03 -2.527 0.011541 *
## PROVINCIAZaragoza 4.201e+03 1.547e+03 2.715 0.006648 **
## rentabieco 2.590e+01 8.617e+00 3.006 0.002665 **
## rentabifin 1.408e-01 1.835e+00 0.077 0.938852
## edad 1.369e+02 1.399e+01 9.788 < 2e-16 ***
## conce 1.092e+01 2.689e+00 4.063 4.93e-05 ***
## numac 4.697e+02 8.135e+01 5.774 8.30e-09 ***
## numpa 7.270e+02 1.661e+02 4.378 1.22e-05 ***
## numest 2.473e+03 9.457e+01 26.150 < 2e-16 ***
## estpSí -5.127e+01 6.935e+02 -0.074 0.941074
## PORCENTAJE_GASTO_CLIENTES 1.598e+01 7.447e+00 2.146 0.031900 *
## coe_100 2.397e+03 5.514e+01 43.474 < 2e-16 ***
## ACTIVO_CORRIENTE -3.224e-01 2.403e-01 -1.341 0.179878
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7502 on 4340 degrees of freedom
## Multiple R-squared: 0.5558, Adjusted R-squared: 0.5495
## F-statistic: 87.6 on 62 and 4340 DF, p-value: < 2.2e-16
Se tiene un valor de R-squared de 0.5495, cuanto más cercano a 1 mejor, por lo que a priori con potencial de mejora. El p-value es muy pequeño < 2.2e-16, algo que es positivo. Existen variables por valores de p-value muy pequeñas y pequeñas < 0.05, siendo estas buenas para el modelo: ayuda visualmente el hecho de presentar mayor número de estrellas (sin estrella variable no relevante para el modelo). Se pueden visualizar también los valores de Estimate: cuanto mayor sean más relevantes serán esas variables y mayor valor tendrán a priori pero se tiene que tener cuidado con este hecho. Así, llaman la atención como buenas varibles para el modelo, a parte de algunas provincias en concreto, la rentabilidad económica, el tiempo que llevan operando, el número de entidades que dan el mismo servicio en el municipio, el número de accionistas y participados, el número de establecimientos por empresa, la cuota de mercado y en menor medida el porcentaje de gasto cliente que recordemos llevaba implícitos la productividad y el número de empleados.
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
step.model <- stepAIC(model, direction = "both", trace = FALSE)
summary(step.model)
##
## Call:
## lm(formula = VENTAS ~ PROVINCIA + rentabieco + edad + conce +
## numac + numpa + numest + PORCENTAJE_GASTO_CLIENTES + coe_100,
## data = dfmpv1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -93028 -3402 -1102 1651 54757
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -8080.073 1489.685 -5.424 6.14e-08 ***
## PROVINCIAAlbacete -559.140 1691.947 -0.330 0.741060
## PROVINCIAAlicante 5230.307 1409.437 3.711 0.000209 ***
## PROVINCIAAlmería 916.676 1679.112 0.546 0.585143
## PROVINCIAAsturias 4337.633 1537.769 2.821 0.004813 **
## PROVINCIAÁvila -8363.616 2292.414 -3.648 0.000267 ***
## PROVINCIABadajoz 2111.500 1640.248 1.287 0.198056
## PROVINCIABaleares 2527.004 1468.621 1.721 0.085383 .
## PROVINCIABarcelona 6098.528 1356.342 4.496 7.09e-06 ***
## PROVINCIABurgos 426.052 1728.726 0.246 0.805342
## PROVINCIACáceres -3373.929 1809.759 -1.864 0.062347 .
## PROVINCIACádiz 2576.826 1571.973 1.639 0.101238
## PROVINCIACantabria 2103.470 1712.357 1.228 0.219361
## PROVINCIACastellón 2030.990 1637.992 1.240 0.215070
## PROVINCIACEUTA -17413.819 2546.895 -6.837 9.19e-12 ***
## PROVINCIACiudad Real 755.659 1648.875 0.458 0.646769
## PROVINCIACórdoba 3510.921 1556.347 2.256 0.024128 *
## PROVINCIACuenca -5489.060 1969.131 -2.788 0.005334 **
## PROVINCIAGerona 3363.688 1469.942 2.288 0.022167 *
## PROVINCIAGranada 1620.254 1621.255 0.999 0.317665
## PROVINCIAGuadalajara -7433.372 2165.206 -3.433 0.000602 ***
## PROVINCIAGuipúzcoa 2842.402 1628.193 1.746 0.080927 .
## PROVINCIAHuelva -312.225 1834.179 -0.170 0.864840
## PROVINCIAHuesca -566.102 1745.959 -0.324 0.745775
## PROVINCIAJaén 2104.223 1619.508 1.299 0.193911
## PROVINCIALa Coruña 4056.242 1474.506 2.751 0.005968 **
## PROVINCIALas Palmas 3369.091 1538.943 2.189 0.028634 *
## PROVINCIALeón 710.797 1615.170 0.440 0.659904
## PROVINCIALérida 1684.486 1570.085 1.073 0.283392
## PROVINCIALogroño 489.326 1785.497 0.274 0.784055
## PROVINCIALugo 866.453 1637.031 0.529 0.596636
## PROVINCIAMadrid 6143.872 1378.080 4.458 8.47e-06 ***
## PROVINCIAMálaga 5890.834 1464.158 4.023 5.83e-05 ***
## PROVINCIAMELILLA -28856.072 3000.978 -9.616 < 2e-16 ***
## PROVINCIAMurcia 5395.693 1498.348 3.601 0.000320 ***
## PROVINCIANavarra 3175.255 1665.327 1.907 0.056627 .
## PROVINCIAOrense -2023.386 1861.679 -1.087 0.277159
## PROVINCIAPalencia -5992.112 2165.398 -2.767 0.005678 **
## PROVINCIAPontevedra 3998.446 1513.973 2.641 0.008295 **
## PROVINCIASalamanca -3230.031 1775.688 -1.819 0.068976 .
## PROVINCIASegovia -13279.323 2346.356 -5.660 1.62e-08 ***
## PROVINCIASevilla 5962.263 1439.001 4.143 3.49e-05 ***
## PROVINCIASoria -14112.328 2474.916 -5.702 1.26e-08 ***
## PROVINCIASta. Cruz de Tenerife 2951.762 1534.044 1.924 0.054399 .
## PROVINCIATarragona 3224.245 1580.857 2.040 0.041455 *
## PROVINCIATeruel -5882.885 1969.233 -2.987 0.002829 **
## PROVINCIAToledo 2329.701 1587.766 1.467 0.142372
## PROVINCIAValencia 6255.376 1396.222 4.480 7.65e-06 ***
## PROVINCIAValladolid 2467.241 1671.515 1.476 0.140003
## PROVINCIAVizcaya 5105.752 1512.905 3.375 0.000745 ***
## PROVINCIAZamora -4920.868 1949.410 -2.524 0.011629 *
## PROVINCIAZaragoza 4204.082 1546.637 2.718 0.006590 **
## rentabieco 25.908 8.604 3.011 0.002617 **
## edad 137.218 13.872 9.892 < 2e-16 ***
## conce 10.842 2.687 4.034 5.57e-05 ***
## numac 471.177 81.296 5.796 7.28e-09 ***
## numpa 726.449 165.830 4.381 1.21e-05 ***
## numest 2472.300 90.149 27.425 < 2e-16 ***
## PORCENTAJE_GASTO_CLIENTES 16.108 7.445 2.164 0.030548 *
## coe_100 2397.649 55.084 43.527 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7501 on 4343 degrees of freedom
## Multiple R-squared: 0.5557, Adjusted R-squared: 0.5496
## F-statistic: 92.05 on 59 and 4343 DF, p-value: < 2.2e-16
No se aprecian cambios significativos en los parámetros clave. Se toma por tanto la decisión de testear df4 eliminando coe_100 y PORCENTAJE_GASTO_CLIENTES:
dfmpv2 <- df4 %>%
subset(select = -c(coe_100, PORCENTAJE_GASTO_CLIENTES))
glimpse(dfmpv2)
## Rows: 4,403
## Columns: 15
## $ PROVINCIA <chr> "Albacete", "Albacete", "Albacete", "Albacete", ~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.7~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.50~
## $ `NÚMERO DE EMPLEADOS` <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1,~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, ~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 3~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, ~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, ~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, ~
## $ estp <fct> No, No, No, No, No, Sí, No, No, No, No, No, No, ~
dfmpv2 <- dfmpv2 %>%
rename(NE = `NÚMERO DE EMPLEADOS`)
glimpse(dfmpv2)
## Rows: 4,403
## Columns: 15
## $ PROVINCIA <chr> "Albacete", "Albacete", "Albacete", "Albacete", "Albacet~
## $ rentabieco <dbl> 0.859980, -4.747951, -0.322200, 12.989917, 1.460637, 1.5~
## $ rentabifin <dbl> 8.395600, -20.148327, -1.934790, 28.382090, 55.738331, 6~
## $ endp <dbl> 89.75678, 76.43501, 83.34703, 54.23199, 97.37948, 76.548~
## $ liq <dbl> 1.101604, 1.308301, 0.853852, 1.577194, 1.009258, 1.2612~
## $ PRODUCTIVIDAD <dbl> 114.918892, 146.386673, 11.743305, 19.276188, 36.950680,~
## $ VENTAS <dbl> 1269.829, 338.338, 17715.250, 20847.926, 1238.501, 20070~
## $ NE <dbl> 1, 1, 46, 40, 2, 54, 1, 2, 8, 2, 18, 1, 6, 4, 1, 123, 10~
## $ coe <dbl> 0.0049253717, 0.0013123345, 0.0687133406, 0.0808642624, ~
## $ edad <dbl> 2, 8, 25, 24, 2, 40, 10, 11, 10, 15, 13, 10, 7, 1, 4, 19~
## $ conce <dbl> 9, 9, 34, 34, 3, 34, 34, 34, 9, 34, 34, 34, 3, 34, 34, 2~
## $ numac <dbl> 1, 0, 3, 3, 0, 1, 1, 1, 3, 0, 4, 0, 2, 2, 0, 1, 0, 1, 0,~
## $ numpa <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0,~
## $ numest <dbl> 1, 1, 2, 2, 2, 7, 1, 1, 1, 2, 2, 1, 1, 1, 1, 8, 1, 2, 1,~
## $ estp <fct> No, No, No, No, No, Sí, No, No, No, No, No, No, No, No, ~
model <- lm(VENTAS ~., dfmpv2)
summary(model)
##
## Call:
## lm(formula = VENTAS ~ ., data = dfmpv2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -46194 -1469 8 1236 45132
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3350.7041 842.4820 -3.977 7.09e-05 ***
## PROVINCIAAlbacete -900.3499 1037.9027 -0.867 0.385732
## PROVINCIAAlicante 1303.3644 865.5332 1.506 0.132178
## PROVINCIAAlmería -1101.4746 1030.6405 -1.069 0.285252
## PROVINCIAAsturias 686.8855 944.1689 0.728 0.466957
## PROVINCIAÁvila -2200.4930 1408.4034 -1.562 0.118266
## PROVINCIABadajoz -716.4891 1006.4465 -0.712 0.476565
## PROVINCIABaleares 648.9524 901.2987 0.720 0.471552
## PROVINCIABarcelona 1702.9858 833.3905 2.043 0.041069 *
## PROVINCIABurgos -1112.7618 1060.5929 -1.049 0.294150
## PROVINCIACáceres -1492.8704 1111.5595 -1.343 0.179329
## PROVINCIACádiz -33.3055 965.3200 -0.035 0.972478
## PROVINCIACantabria -605.9132 1051.0129 -0.577 0.564304
## PROVINCIACastellón 170.0064 1004.7146 0.169 0.865640
## PROVINCIACEUTA -4918.0087 1568.8557 -3.135 0.001731 **
## PROVINCIACiudad Real -339.8871 1011.6227 -0.336 0.736901
## PROVINCIACórdoba 446.6828 955.3467 0.468 0.640122
## PROVINCIACuenca -2255.2308 1209.0371 -1.865 0.062205 .
## PROVINCIAGerona 622.5211 902.2876 0.690 0.490271
## PROVINCIAGranada -292.5708 994.8091 -0.294 0.768697
## PROVINCIAGuadalajara -2060.5943 1329.5763 -1.550 0.121259
## PROVINCIAGuipúzcoa 693.2162 998.7095 0.694 0.487649
## PROVINCIAHuelva -496.6816 1125.5466 -0.441 0.659032
## PROVINCIAHuesca -26.5025 1070.7062 -0.025 0.980254
## PROVINCIAJaén -333.0317 993.7053 -0.335 0.737535
## PROVINCIALa Coruña -297.2720 906.1584 -0.328 0.742884
## PROVINCIALas Palmas 213.8558 945.1006 0.226 0.820996
## PROVINCIALeón -267.9676 991.0902 -0.270 0.786883
## PROVINCIALérida 476.6014 962.8840 0.495 0.620644
## PROVINCIALogroño 661.1249 1095.2809 0.604 0.546133
## PROVINCIALugo -154.2003 1004.0017 -0.154 0.877944
## PROVINCIAMadrid 1109.6715 847.4038 1.309 0.190436
## PROVINCIAMálaga 841.0601 900.1275 0.934 0.350161
## PROVINCIAMELILLA -8257.3162 1856.4681 -4.448 8.89e-06 ***
## PROVINCIAMurcia 1271.6292 920.5916 1.381 0.167253
## PROVINCIANavarra 1234.4546 1021.6608 1.208 0.227005
## PROVINCIAOrense -1311.6247 1141.8938 -1.149 0.250768
## PROVINCIAPalencia -2699.9055 1328.6567 -2.032 0.042209 *
## PROVINCIAPontevedra 749.4970 930.4416 0.806 0.420559
## PROVINCIASalamanca -1745.0095 1088.9806 -1.602 0.109134
## PROVINCIASegovia -4881.7639 1442.6384 -3.384 0.000721 ***
## PROVINCIASevilla 1414.2665 884.8348 1.598 0.110040
## PROVINCIASoria -6655.5715 1518.5949 -4.383 1.20e-05 ***
## PROVINCIASta. Cruz de Tenerife -469.8013 942.3346 -0.499 0.618121
## PROVINCIATarragona 435.5615 970.5361 0.449 0.653610
## PROVINCIATeruel -1955.4523 1208.5565 -1.618 0.105734
## PROVINCIAToledo 814.9058 974.2439 0.836 0.402948
## PROVINCIAValencia 1794.7958 858.4384 2.091 0.036607 *
## PROVINCIAValladolid -458.3797 1025.8604 -0.447 0.655024
## PROVINCIAVizcaya 1141.1233 928.9297 1.228 0.219353
## PROVINCIAZamora -2622.6708 1195.6896 -2.193 0.028329 *
## PROVINCIAZaragoza 1547.5199 949.0212 1.631 0.103037
## rentabieco 15.7126 6.0781 2.585 0.009768 **
## rentabifin 0.7039 1.1298 0.623 0.533284
## endp 5.0026 2.3287 2.148 0.031748 *
## liq 6.3002 13.9875 0.450 0.652430
## PRODUCTIVIDAD 73.0598 3.5720 20.453 < 2e-16 ***
## NE 391.4765 4.6599 84.009 < 2e-16 ***
## coe 73037.4188 3909.7968 18.681 < 2e-16 ***
## edad -17.3602 9.1548 -1.896 0.057986 .
## conce 5.4984 1.6503 3.332 0.000870 ***
## numac 59.0730 50.2982 1.174 0.240277
## numpa 179.8079 102.0871 1.761 0.078255 .
## numest 306.4183 63.5309 4.823 1.46e-06 ***
## estpSí 308.1608 425.1939 0.725 0.468642
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4599 on 4338 degrees of freedom
## Multiple R-squared: 0.8331, Adjusted R-squared: 0.8307
## F-statistic: 338.5 on 64 and 4338 DF, p-value: < 2.2e-16
Se tiene un valor de R-squared significativamente mejor, de 0.8307, cuanto más cercano a 1 mejor. El p-value es muy pequeño < 2.2e-16, algo que es positivo. Existen variables por valores de p-value muy pequeñas y pequeñas < 0.05, siendo estas buenas para el modelo: ayuda visualmente el hecho de presentar mayor número de estrellas (sin estrella variable no relevante para el modelo). Se pueden visualizar también los valores de Estimate: cuanto mayor sean más relevantes serán esas variables y mayor valor tendrán a priori pero se tiene que tener cuidado con este hecho. Así, llaman la atención como buenas varibles para el modelo, a parte de algunas provincias en concreto, la rentabilidad económica, la productividad, el número de empleados, la cuota de mercado, el número de entidades que dan el mismo servicio en el municipio, el número de establecimientos por empresa, y en menor medida el nivel de endeudamiento.
step.model <- stepAIC(model, direction = "both", trace = FALSE)
summary(step.model)
##
## Call:
## lm(formula = VENTAS ~ PROVINCIA + rentabieco + endp + PRODUCTIVIDAD +
## NE + coe + edad + conce + numpa + numest, data = dfmpv2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -46108 -1460 -6 1237 45626
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3283.486 839.683 -3.910 9.36e-05 ***
## PROVINCIAAlbacete -875.725 1037.495 -0.844 0.398673
## PROVINCIAAlicante 1300.410 865.290 1.503 0.132948
## PROVINCIAAlmería -1109.807 1030.038 -1.077 0.281342
## PROVINCIAAsturias 692.299 943.607 0.734 0.463188
## PROVINCIAÁvila -2245.642 1407.631 -1.595 0.110710
## PROVINCIABadajoz -653.469 1005.244 -0.650 0.515688
## PROVINCIABaleares 646.793 900.559 0.718 0.472665
## PROVINCIABarcelona 1701.905 833.077 2.043 0.041121 *
## PROVINCIABurgos -1135.703 1060.207 -1.071 0.284135
## PROVINCIACáceres -1497.882 1110.886 -1.348 0.177611
## PROVINCIACádiz -17.706 964.288 -0.018 0.985351
## PROVINCIACantabria -615.928 1050.444 -0.586 0.557671
## PROVINCIACastellón 163.402 1004.459 0.163 0.870781
## PROVINCIACEUTA -4943.601 1568.246 -3.152 0.001631 **
## PROVINCIACiudad Real -319.566 1010.606 -0.316 0.751856
## PROVINCIACórdoba 470.888 954.693 0.493 0.621871
## PROVINCIACuenca -2234.007 1207.751 -1.850 0.064421 .
## PROVINCIAGerona 600.058 901.797 0.665 0.505829
## PROVINCIAGranada -235.897 993.589 -0.237 0.812343
## PROVINCIAGuadalajara -2089.153 1329.011 -1.572 0.116032
## PROVINCIAGuipúzcoa 703.504 998.403 0.705 0.481079
## PROVINCIAHuelva -525.751 1124.823 -0.467 0.640232
## PROVINCIAHuesca -25.968 1070.426 -0.024 0.980647
## PROVINCIAJaén -323.997 993.064 -0.326 0.744243
## PROVINCIALa Coruña -249.110 904.660 -0.275 0.783050
## PROVINCIALas Palmas 204.898 944.475 0.217 0.828263
## PROVINCIALeón -238.965 990.245 -0.241 0.809319
## PROVINCIALérida 481.476 962.596 0.500 0.616970
## PROVINCIALogroño 653.921 1094.497 0.597 0.550229
## PROVINCIALugo -151.762 1003.743 -0.151 0.879828
## PROVINCIAMadrid 1124.665 847.023 1.328 0.184319
## PROVINCIAMálaga 860.159 899.577 0.956 0.339033
## PROVINCIAMELILLA -8284.102 1855.356 -4.465 8.21e-06 ***
## PROVINCIAMurcia 1253.928 919.907 1.363 0.172921
## PROVINCIANavarra 1211.253 1021.190 1.186 0.235640
## PROVINCIAOrense -1295.163 1141.344 -1.135 0.256535
## PROVINCIAPalencia -2730.988 1328.011 -2.056 0.039799 *
## PROVINCIAPontevedra 749.351 929.923 0.806 0.420391
## PROVINCIASalamanca -1724.092 1088.487 -1.584 0.113281
## PROVINCIASegovia -4916.863 1441.799 -3.410 0.000655 ***
## PROVINCIASevilla 1415.677 884.495 1.601 0.109550
## PROVINCIASoria -6709.554 1517.887 -4.420 1.01e-05 ***
## PROVINCIASta. Cruz de Tenerife -479.497 941.726 -0.509 0.610660
## PROVINCIATarragona 437.035 970.071 0.451 0.652359
## PROVINCIATeruel -1979.887 1208.090 -1.639 0.101315
## PROVINCIAToledo 838.551 973.375 0.861 0.389017
## PROVINCIAValencia 1786.805 857.779 2.083 0.037304 *
## PROVINCIAValladolid -427.416 1025.097 -0.417 0.676735
## PROVINCIAVizcaya 1123.429 928.636 1.210 0.226436
## PROVINCIAZamora -2616.047 1195.324 -2.189 0.028681 *
## PROVINCIAZaragoza 1536.002 948.694 1.619 0.105505
## rentabieco 15.475 6.070 2.549 0.010824 *
## endp 4.680 2.289 2.044 0.040990 *
## PRODUCTIVIDAD 73.365 3.559 20.614 < 2e-16 ***
## NE 391.779 4.628 84.653 < 2e-16 ***
## coe 73678.256 3881.853 18.980 < 2e-16 ***
## edad -16.373 9.024 -1.814 0.069693 .
## conce 5.529 1.649 3.352 0.000809 ***
## numpa 196.569 101.396 1.939 0.052611 .
## numest 322.366 60.918 5.292 1.27e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4598 on 4342 degrees of freedom
## Multiple R-squared: 0.8331, Adjusted R-squared: 0.8307
## F-statistic: 361.1 on 60 and 4342 DF, p-value: < 2.2e-16
No se aprecian cambios significativos en los parámetros clave.
model <- lm(VENTAS ~ . - edad - numpa, dfmpv2)
summary(model)
##
## Call:
## lm(formula = VENTAS ~ . - edad - numpa, data = dfmpv2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -45278 -1498 15 1227 46081
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3613.2500 830.6136 -4.350 1.39e-05 ***
## PROVINCIAAlbacete -894.4147 1038.1202 -0.862 0.388971
## PROVINCIAAlicante 1341.0587 865.5462 1.549 0.121364
## PROVINCIAAlmería -1052.3213 1030.3981 -1.021 0.307180
## PROVINCIAAsturias 686.2082 944.5480 0.726 0.467575
## PROVINCIAÁvila -2233.8197 1408.9476 -1.585 0.112936
## PROVINCIABadajoz -702.2537 1006.3752 -0.698 0.485337
## PROVINCIABaleares 652.4531 901.6213 0.724 0.469323
## PROVINCIABarcelona 1695.4489 833.7161 2.034 0.042052 *
## PROVINCIABurgos -1157.0183 1060.8802 -1.091 0.275500
## PROVINCIACáceres -1447.2263 1111.8174 -1.302 0.193096
## PROVINCIACádiz 29.8420 964.8746 0.031 0.975328
## PROVINCIACantabria -626.6343 1051.3884 -0.596 0.551202
## PROVINCIACastellón 149.4181 1004.9344 0.149 0.881810
## PROVINCIACEUTA -4977.1410 1568.9734 -3.172 0.001523 **
## PROVINCIACiudad Real -333.4317 1012.0026 -0.329 0.741811
## PROVINCIACórdoba 466.7133 955.3843 0.489 0.625214
## PROVINCIACuenca -2255.5253 1209.2850 -1.865 0.062225 .
## PROVINCIAGerona 634.8571 902.5761 0.703 0.481855
## PROVINCIAGranada -250.9556 994.4101 -0.252 0.800770
## PROVINCIAGuadalajara -2074.2668 1330.0032 -1.560 0.118928
## PROVINCIAGuipúzcoa 736.6265 998.9893 0.737 0.460936
## PROVINCIAHuelva -488.3703 1125.8580 -0.434 0.664473
## PROVINCIAHuesca -70.0003 1071.0584 -0.065 0.947893
## PROVINCIAJaén -292.7274 993.7887 -0.295 0.768346
## PROVINCIALa Coruña -264.2002 906.3323 -0.292 0.770679
## PROVINCIALas Palmas 309.9472 944.0681 0.328 0.742693
## PROVINCIALeón -274.1665 991.4954 -0.277 0.782163
## PROVINCIALérida 434.6536 963.1668 0.451 0.651814
## PROVINCIALogroño 681.8760 1095.7583 0.622 0.533786
## PROVINCIALugo -158.9042 1004.4464 -0.158 0.874306
## PROVINCIAMadrid 1145.5092 847.2821 1.352 0.176452
## PROVINCIAMálaga 883.8496 899.9049 0.982 0.326076
## PROVINCIAMELILLA -8426.0356 1855.9158 -4.540 5.78e-06 ***
## PROVINCIAMurcia 1286.5564 920.8584 1.397 0.162447
## PROVINCIANavarra 1264.5924 1021.9673 1.237 0.216002
## PROVINCIAOrense -1329.5756 1142.3951 -1.164 0.244549
## PROVINCIAPalencia -2646.2603 1329.0318 -1.991 0.046530 *
## PROVINCIAPontevedra 787.6824 930.7330 0.846 0.397430
## PROVINCIASalamanca -1738.6451 1089.3069 -1.596 0.110539
## PROVINCIASegovia -4875.0293 1442.4875 -3.380 0.000732 ***
## PROVINCIASevilla 1478.8863 884.8528 1.671 0.094727 .
## PROVINCIASoria -6708.1677 1518.7150 -4.417 1.03e-05 ***
## PROVINCIASta. Cruz de Tenerife -370.8507 941.7874 -0.394 0.693768
## PROVINCIATarragona 442.5091 970.8756 0.456 0.648568
## PROVINCIATeruel -1971.6468 1208.7618 -1.631 0.102936
## PROVINCIAToledo 809.6093 974.3866 0.831 0.406081
## PROVINCIAValencia 1812.6465 858.8065 2.111 0.034859 *
## PROVINCIAValladolid -428.8156 1025.8342 -0.418 0.675956
## PROVINCIAVizcaya 1179.5352 929.1453 1.269 0.204337
## PROVINCIAZamora -2571.6038 1195.5701 -2.151 0.031536 *
## PROVINCIAZaragoza 1571.2886 949.4015 1.655 0.097991 .
## rentabieco 15.8415 6.0750 2.608 0.009148 **
## rentabifin 0.8754 1.1259 0.778 0.436894
## endp 5.6812 2.2841 2.487 0.012908 *
## liq 6.3075 13.9837 0.451 0.651969
## PRODUCTIVIDAD 74.0274 3.5372 20.928 < 2e-16 ***
## NE 390.1246 4.5219 86.274 < 2e-16 ***
## coe 73066.1365 3891.0215 18.778 < 2e-16 ***
## conce 5.4924 1.6506 3.327 0.000884 ***
## numac 54.9782 49.5025 1.111 0.266795
## numest 313.6327 63.4061 4.946 7.85e-07 ***
## estpSí 352.0494 424.8505 0.829 0.407352
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4601 on 4340 degrees of freedom
## Multiple R-squared: 0.8329, Adjusted R-squared: 0.8305
## F-statistic: 348.9 on 62 and 4340 DF, p-value: < 2.2e-16
No se aprecian cambios significativos en los parámetros clave.
step.model <- stepAIC(model, direction = "both", trace = FALSE)
summary(step.model)
##
## Call:
## lm(formula = VENTAS ~ PROVINCIA + rentabieco + endp + PRODUCTIVIDAD +
## NE + coe + conce + numest, data = dfmpv2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -45209 -1481 9 1235 46691
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3532.149 826.554 -4.273 1.97e-05 ***
## PROVINCIAAlbacete -874.165 1037.798 -0.842 0.399652
## PROVINCIAAlicante 1333.453 865.329 1.541 0.123395
## PROVINCIAAlmería -1069.181 1029.838 -1.038 0.299234
## PROVINCIAAsturias 686.995 944.027 0.728 0.466819
## PROVINCIAÁvila -2288.063 1408.179 -1.625 0.104270
## PROVINCIABadajoz -644.773 1005.388 -0.641 0.521350
## PROVINCIABaleares 645.405 900.912 0.716 0.473789
## PROVINCIABarcelona 1690.582 833.428 2.028 0.042573 *
## PROVINCIABurgos -1186.116 1060.497 -1.118 0.263436
## PROVINCIACáceres -1457.546 1111.199 -1.312 0.189695
## PROVINCIACádiz 38.383 963.934 0.040 0.968239
## PROVINCIACantabria -641.025 1050.826 -0.610 0.541881
## PROVINCIACastellón 138.172 1004.675 0.138 0.890619
## PROVINCIACEUTA -5015.335 1568.360 -3.198 0.001395 **
## PROVINCIACiudad Real -318.772 1011.057 -0.315 0.752559
## PROVINCIACórdoba 483.034 954.890 0.506 0.612986
## PROVINCIACuenca -2237.798 1208.017 -1.852 0.064028 .
## PROVINCIAGerona 606.329 902.104 0.672 0.501538
## PROVINCIAGranada -201.661 993.476 -0.203 0.839156
## PROVINCIAGuadalajara -2108.799 1329.407 -1.586 0.112751
## PROVINCIAGuipúzcoa 746.474 998.708 0.747 0.454838
## PROVINCIAHuelva -525.706 1125.144 -0.467 0.640356
## PROVINCIAHuesca -69.658 1070.809 -0.065 0.948135
## PROVINCIAJaén -290.583 993.252 -0.293 0.769875
## PROVINCIALa Coruña -220.647 904.967 -0.244 0.807383
## PROVINCIALas Palmas 295.851 943.332 0.314 0.753822
## PROVINCIALeón -249.231 990.707 -0.252 0.801386
## PROVINCIALérida 438.132 962.904 0.455 0.649124
## PROVINCIALogroño 671.664 1095.011 0.613 0.539654
## PROVINCIALugo -158.651 1004.218 -0.158 0.874476
## PROVINCIAMadrid 1155.374 846.972 1.364 0.172599
## PROVINCIAMálaga 897.748 899.415 0.998 0.318264
## PROVINCIAMELILLA -8453.045 1854.825 -4.557 5.32e-06 ***
## PROVINCIAMurcia 1263.836 920.168 1.373 0.169673
## PROVINCIANavarra 1235.676 1021.528 1.210 0.226485
## PROVINCIAOrense -1313.147 1141.877 -1.150 0.250211
## PROVINCIAPalencia -2679.417 1328.361 -2.017 0.043748 *
## PROVINCIAPontevedra 782.974 930.279 0.842 0.400027
## PROVINCIASalamanca -1722.631 1088.888 -1.582 0.113720
## PROVINCIASegovia -4925.490 1441.653 -3.417 0.000640 ***
## PROVINCIASevilla 1480.324 884.540 1.674 0.094291 .
## PROVINCIASoria -6773.838 1517.916 -4.463 8.30e-06 ***
## PROVINCIASta. Cruz de Tenerife -382.864 941.185 -0.407 0.684183
## PROVINCIATarragona 440.646 970.429 0.454 0.649799
## PROVINCIATeruel -2004.572 1208.275 -1.659 0.097181 .
## PROVINCIAToledo 824.202 973.658 0.847 0.397320
## PROVINCIAValencia 1802.580 858.174 2.100 0.035744 *
## PROVINCIAValladolid -404.073 1025.189 -0.394 0.693494
## PROVINCIAVizcaya 1158.196 928.868 1.247 0.212505
## PROVINCIAZamora -2572.082 1195.267 -2.152 0.031461 *
## PROVINCIAZaragoza 1559.886 949.107 1.644 0.100346
## rentabieco 15.527 6.067 2.559 0.010520 *
## endp 5.325 2.230 2.388 0.016986 *
## PRODUCTIVIDAD 74.319 3.522 21.100 < 2e-16 ***
## NE 390.551 4.464 87.492 < 2e-16 ***
## coe 73790.644 3853.814 19.147 < 2e-16 ***
## conce 5.531 1.650 3.353 0.000806 ***
## numest 332.073 60.683 5.472 4.69e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4601 on 4344 degrees of freedom
## Multiple R-squared: 0.8328, Adjusted R-squared: 0.8306
## F-statistic: 373.1 on 58 and 4344 DF, p-value: < 2.2e-16
No se aprecian cambios significativos en los parámetros clave: se detiene el proceso de intento de mejora en este punto y se concluye hasta aquí que se tienen como buenas varibles para el modelo, a parte de algunas provincias en concreto (Melilla, Segovia, Soria, Ceuta y en menor medida Valencia, Zamora, Barcelona y Palencia), la productividad, el número de empleados, la cuota de mercado, el número de entidades que dan el mismo servicio en el municipio, el número de establecimientos por empresa, y en menor medida el nivel de endeudamiento y la rentabilidad económica.
car::vif(step.model)
## GVIF Df GVIF^(1/(2*Df))
## PROVINCIA 2.386330 51 1.008563
## rentabieco 1.375210 1 1.172694
## endp 1.419829 1 1.191566
## PRODUCTIVIDAD 1.052511 1 1.025920
## NE 2.104536 1 1.450702
## coe 2.073634 1 1.440012
## conce 1.469220 1 1.212114
## numest 1.411076 1 1.187887
Se presentan valores por encima de 5, por lo que no existen problemas de correlación entre las variables del modelo y que por lo tanto tanto ha sido una buena idea realizar una regresión lineal como que habiéndola hecho, éste es a priori buen modelo.
plot(step.model)
Se extraen una serie de conclusiones:
1ª gráfica: no presenta una curvatura marcada excepto en la zona inicial y es relativamente recta. Bien a priori.
2ª gráfica: respecto a la normalidad en los extremos se va, ya no es recta. Ciertas sospechas. Se prosigue en el análisis.
3ª gráfica: respecto a la homocedasticidad no presenta una curvatura marcada excepto en la zona inicial y es relativamente recta. Bien a priori.
4ª gráfica: los valores no se salen de los límites. Bien a priori.
Todos los valores están dentro de los niveles relativamente seguros, por lo tanto éste es un buen modelo.
Estableciendo una relación con lo analizado y a las conclusiones a las que se llegaron tanto en el apartado Visión Global del Ejercicio 1 como en el Ejercicio 2, concuerda la correlación que presentaban las VENTAS con la cuota de mercado (0.84), el número de empleados (0.81) y la productividad (0.49) con que sean estas tres precisamente las variables que presenten mayor significancia en el modelo con un p-value muy bajo < 2e-16 y llamándo la atención el elevado estimate positivo de sobre todo la cuota de mercado (73790) lo que indica su gran peso e incidencia en las ventas. ¡Aumentemos la cuota de mercado y aumentaréis las ventas! El resto de variables significativas ya comentadas anteriormente del modelo tienen valores de estimate positivos y también influyen en la progresión de las ventas, pero se quería remarcar en especial la cuota de mercado sin desmerecer a las demás que también empujan las ventas.